题目描述
求两数的积。
输入输出格式
输入格式:
两行,两个数。
输出格式:
积
输入输出样例
说明
每个数字不超过10^2000,需用高精
哇高精a*b也太容易错了吧??
要注意的点如下:
1.0的问题!要特判;
2.注意最高位的进位。无论是乘还是加都要注意;
3.这种题查错不好查,可以先试一些特殊的数据(比如有0的),还找不出来的话大概就要手算了。。。
1 #include <iostream> 2 #include <cmath> 3 #include <cstring> 4 #include <cstdio> 5 #include <cstdlib> 6 #include <algorithm> 7 8 using namespace std; 9 char a[5000],b[5000]; 10 int aans[5000],ans[5000]; 11 int main() 12 { 13 cin>>a>>b; 14 int len1=strlen(a),len2=strlen(b); 15 if(a[0]=='0' || b[0]=='0') {printf("0");return 0;} 16 for(int i=0;i<len1/2;i++) 17 { 18 char tmp; 19 tmp=a[i]; 20 a[i]=a[len1-i-1]; 21 a[len1-i-1]=tmp; 22 } 23 for(int i=0;i<len2/2;i++) 24 { 25 char tmp; 26 tmp=b[i]; 27 b[i]=b[len2-i-1]; 28 b[len2-i-1]=tmp; 29 } 30 //---------------------- 31 for(int i=0;i<len2;i++) 32 { 33 int s=b[i]-'0'; 34 if(b[i]=='0') s=0; 35 int jw=0,sum=0; 36 for(int j=0;j<len1;j++) 37 { 38 int tmp; 39 if(a[j]=='0') tmp=0; 40 else tmp=a[j]-'0'; 41 sum=tmp*s; 42 sum+=jw; 43 jw=sum/10; 44 ans[j]=sum%10; 45 } 46 if(jw!=0) ans[len1]=jw; 47 int ssum=0,jjw=0; 48 for(int j=0;j<=len1;j++) 49 { 50 ssum=aans[j+i]+ans[j]+jjw; 51 jjw=ssum/10; 52 aans[j+i]=ssum%10; 53 } 54 //if(jjw!=0) aans[len1+i]=jjw; 55 /* for(int j=0;j<=len1+i;j++) cout<<aans[j]; 56 cout<<endl;*/ 57 memset(ans,0,sizeof(ans)); 58 } 59 bool ok=true; 60 for(int i=len1+len2;i>=0;i--) 61 { 62 if(ok && aans[i]==0) continue; 63 else if(ok && aans[i]!=0) ok=false; 64 printf("%d",aans[i]); 65 } 66 return 0; 67 }