Description:
给定一些大数,请计算其积。
Input:
输入数据中含有一些整数对(对数≤1000),若某对整数(整数位数≤200)的值为0 0,则表示输入结束。Output:
每对整数对应一个乘法计算结果,输出该结果,每个结果输出完后应回车。Sample Input:
2 3 12 34 0 0
Sample Output:
6408
//这道题坑到我n次,这道题要考虑负数,一开始没考虑,但关键是(-0乘以0)不能等于负0,这一点又让我WA了几次,坑坑
#include<stdio.h> #include<string.h> #define max 10010 int main() { int a[max+10],b[max+10],c[2*max+10]; char s1[max+10],s2[max+10]; int len1,len2,len,i,j; int t,k=0; while(~scanf("%s %s",s1,s2)) { int flag1=0,flag2=0; if(!strcmp(s1,"0")&&!strcmp(s2,"0")) break; if(s1[0]=='-') { flag1=1; s1[0]='0'; } if(s2[0]=='-') { flag2=1; s2[0]='0'; } memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); len1=strlen(s1); len2=strlen(s2); j=0; for(i=len1-1;i>=0;--i) a[j++]=s1[i]-'0'; j=0; for(i=len2-1;i>=0;--i) b[j++]=s2[i]-'0'; for(i=0;i<len1;++i) for(j=0;j<len2;++j) c[i+j]+=a[i]*b[j]; for(i=0;i<2*max;++i) if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]%=10; } for(i=2*max;i>=0;--i)//这里i>0,0*6=0;不然没输出 if(c[i]!=0) break; if(i>=0) { if((flag1&&!flag2)||(!flag1&&flag2)) printf("-"); for(j=i;j>=0;--j) { printf("%d",c[j]); } } else { printf("0"); } puts(""); } return 0; }