P1303 A*B Problem

题目描述

求两数的积。

输入输出格式

输入格式:

两行,两个数。

输出格式:

输入输出样例

输入样例#1: 
1 
2
输出样例#1: 
2

说明

每个数字不超过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 }
P1303

猜你喜欢

转载自www.cnblogs.com/YXY-1211/p/9125468.html
ab