
给出2个大整数A,B,计算A*B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 1000,A,B >= 0)
Output
输出A * B
Input示例
123456
234567
Output示例
28958703552
解题思路
倒序储存,完成下面过程即可
123x31=3813
3 2 1
x 1 3
-------------
3 9 6 3
+ 2 1
-------------
3 1 8 3
核心代码
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
{
c[i+j]+=a[i]*b[j];
if(c[i+j]>9)
{
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
#include <string.h> #define MAX 10010 int () { char s1[MAX],s2[MAX]; int a[MAX],b[MAX]; int len1,len2,i,j; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); scanf("%s%s",s1,s2); len1=strlen(s1); len2=strlen(s2); for(i=0;i<len1;i++) a[len1-1-i]=s1[i]-'0'; for(i=0;i<len2;i++) b[len2-1-i]=s2[i]-'0'; int c[MAX]; memset(c,0,sizeof(c)); for(i=0;i<len1;i++) for(j=0;j<len2;j++) { c[i+j]+=a[i]*b[j]; if(c[i+j]>9) { c[i+j+1]+=c[i+j]/10; c[i+j]%=10; } } for(i=MAX-1;i>0;i--) if(c[i] != 0) break; for(;i>=0;i--) printf("%d",c[i]); printf("n"); return 0; }
|
近期评论