ZJUTOJ大数乘

大数乘
Time Limit:5000MS  Memory Limit:32768K

Description:

给定一些大数,请计算其积。

Input:

输入数据中含有一些整数对(对数≤1000),若某对整数(整数位数≤200)的值为0 0,则表示输入结束。

Output:

每对整数对应一个乘法计算结果,输出该结果,每个结果输出完后应回车。

Sample Input:

2 3
12 34
0 0

Sample Output:

6
408

注意负数和输出不能为-0
 
 
 
代码:
 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 const int maxlen=1005;
 6 
 7 int main()
 8 {
 9     int i,j;
10     char s1[maxlen],s2[maxlen];
11     int a[maxlen],b[maxlen],c[maxlen*2];
12     while(scanf("%s%s",s1,s2)&&(strcmp(s1,"0")!=0||strcmp(s2,"0")!=0))
13     {
14         memset(a,0,sizeof(a));
15         memset(b,0,sizeof(b));
16         memset(c,0,sizeof(c));
17         int len1=strlen(s1);
18         int len2=strlen(s2);
19         for(i=len1-1,j=0;i>=0&&s1[i]!='-';i--)
20         a[j++]=s1[i]-'0';
21         for(i=len2-1,j=0;i>=0&&s2[i]!='-';i--)
22         b[j++]=s2[i]-'0';
23         for(i=0;i<len1;i++)
24         for(j=0;j<len2;j++)
25         c[i+j]+=a[i]*b[j];
26         for(i=0;i<maxlen*2;i++)
27         {
28             if(c[i]>=10)
29             {
30                 c[i+1]+=c[i]/10;
31                 c[i]%=10;
32             }
33         }
34         for(i=maxlen*2-1;i>=0;i--)
35         if(c[i])break;
36         if(i==-1)
37         {
38             printf("0
");
39             continue;
40         }
41         if(s1[0]=='-'&&s2[0]!='-'||(s1[0]!='-'&&s2[0]=='-'))
42         printf("-");
43         for(;i>=0;i--)
44         printf("%d",c[i]);
45         printf("
");
46     }
47     return 0;
48 }
 
原文地址:https://www.cnblogs.com/homura/p/4673551.html