给出2个大整数A,B,计算A*B的结果。
Input
第1行:大数A 第2行:大数B (A,B的长度 <= 1000,A,B >= 0)
Output
输出A * B
Input示例
123456 234567
Output示例
28958703552
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define INF Ox3f3f3f3f
char a[1001],b[1001];
int ai[1001],bi[1001];
int c[2002];
char str[2002];
int main(){
int i,j;
scanf("%s%s",a,b);
int len_a=strlen(a);
int len_b=strlen(b);
memset(c,0,sizeof(c));
memset(str,0,sizeof(str));
int k=0;
for(i=len_a-1;i>=0;i--)
ai[k++]=a[i]-'0';
k=0;
for(i=len_b-1;i>=0;i--)
bi[k++]=b[i]-'0';
for(i=0;i<len_b;i++) //用大整数b的每位去乘大整数a
{
int start=i; //得到的中间结果跟大整数b中的位对齐
for(j=0;j<len_a;j++)
c[start++]+=ai[j]*bi[i];
}
for(i=0;i<2002;i++){ //低位向高位进位
if(c[i]>9){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
for(i=2002;i>=0;i--) //求乘积的长度
{
if(c[i])
break;
}
int lenp=i+1; //乘积的长度
for(i=0;i<lenp;i++) //将乘积转换成字符形式
str[lenp-1-i]=c[i]+'0';
//str[lenp]=0; //串结束标志
printf("%s\n",str);
return 0;
}