大整数乘法,把十位进制改为1000位进制就可以了
#include <iostream>
#include <stdio.h>#include <string.h>
#include <algorithm>
#include <queue>
#define imax 1000005
using namespace std;
int an,bn,A[imax],B[imax];
int result[imax];
char a[imax],b[imax];
void multiLargeNum(int* A, int* B) {
memset(result, 0, sizeof(result));
result[an+bn] = 0;
int multiFlag; // 乘积进位
int addFlag; // 加法进位
for(int i=0; i <= an; i++) { // B的每一位
multiFlag = 0;
for(int j=0; j <= bn; j++) { // A的每一位
int temp1 = A[i]*B[j]+ multiFlag+result[i+j];
multiFlag = temp1 / 1000;
result[i+j] = temp1 % 1000 ;
}
result[i + bn+1] += multiFlag ;
//for(int k=an+bn+2;k>=0;k--)
// printf("%d ", result[k]);
// cout<<endl;
}
}
int main() {
while(scanf("%s %s",a+1,b+1)!=EOF) {
int num;
int len1=strlen(a+1);
int len2=strlen(b+1);
int i=len1;
num=0;
while(i>0) {
if(i-3>=0) {
A[num++]=(a[i-2]-'0')*100+(a[i-1]-'0')*10+(a[i]-'0');
i=i-3;
}
else {
if(i==1)
A[num]=a[i]-'0';
if(i==2)
A[num]=(a[1]-'0')*10+a[2]-'0';
i=0;
num++;
}
}
an=num-1;
num=0;
i=len2;
while(i>0) {
if(i-3>=0) {
B[num++]=(b[i-2]-'0')*100+(b[i-1]-'0')*10+(b[i]-'0');
i=i-3;
}
else {
if(i==1)
B[num]=b[i]-'0';
if(i==2)
B[num]=(b[1]-'0')*10+b[2]-'0';
i=0;
num++;
}
}
bn=num-1;
multiLargeNum(A, B);
int st=an+bn;
if(result[an+bn+1]!=0)
printf("%d",result[an+bn+1]);
else
{
printf("%d",result[an+bn]);
st=an+bn-1;
}
for(i=st; i>=0; i--)
{
printf("%d",result[i]/100);
result[i]=result[i]%100;
printf("%d", result[i]/10);
result[i]=result[i]%10;
printf("%d", result[i]);
}
cout<<endl;
}
// delete [] res;
return 0;
}