您的位置:首页 > 编程语言 > C语言/C++

C语言长整型相乘

2017-09-24 21:47 204 查看

思路

用数组strA,strB存储数字,将两个大数对应位置(i、j)上的数相乘,乘积直接放在数组strC的第(i+j)位,待所有位置上的数都相乘后,对strC进行进位。

#include<iostream>
#include<cstring>
using namespace std;

int main(){
int strA[4000],strB[4000],strC[4000]={0};
int lenA=0,lenB=0,lenC=0,i,j,t=0,flagA=1,flagB=1;
char str[40000];

//输入第一个数
cout<<"输入第一个数,回车结束输入:";
gets(str);
for(i=0;i<strlen(str);i++){
if(str[i]=='-'){
flagA=-1;
continue;
}
strA[t++]=str[i]-'0';
}
lenA=t;
//输入第二个数
cout<<"输入第二个数,回车结束输入:";
gets(str);
for(i=0,t=0;i<strlen(str);i++){
if(str[i]=='-'){
flagB=-1;
continue;
}
strB[t++]=str[i]-'0';
}
lenB=t;
//两数相乘
for(int i=lenA-1,p=0;i>=0;i--,p++){
for(int j=lenB-1,k=0;j>=0;j--,k++){
strC[k+p]+=strA[i]*strB[j];
lenC=k+p+1;
}
}
//进位
int newLen=0;
for(int i=0;i<lenC;i++){
if(strC[i]>=10){
int n=strC[i];
strC[i]=n%10;
n=n/10;
newLen=i;
int t=i+1;
while(n){
strC[t]+=n%10;
n=n/10;
newLen=t;
t++;
}
}
if(newLen<i) newLen=i;
}
cout<<"乘积:";
if(strC[newLen]==0){
cout<<"0"<<endl;
return 0;
}
//判断符号
if(flagA*flagB==-1) cout<<"-";
//输出乘积
for(int i=newLen;i>=0;i--){
cout<<strC[i];
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 大数相乘