描述
高精度乘法
输入:两行,每行表示一个非负整数(不超过10000位)
输出:两数的乘积。
样例1
样例输入1
99
101
样例输出1
9999
- #include<iostream>
- #include<cstring>
- #define T 1000000
- using namespace std;
- char a1[T],b1[T];
- int a[T],b[T],c[T],lena,lenb,lenc,x,t,f;
- int main()
- {
- while(cin>>a1>>b1)
- {
- memset(a,0,sizeof(a));
- memset(b,0,sizeof(b));
- memset(c,0,sizeof(c));
- lena=strlen(a1);
- lenb=strlen(b1);
- f=1;t=0;
- if(a1[0]=='-')//判断第一个字符是不是负数,如果是,再判断另一个是不是,再想输出问题对于B1字符数组同理
- {
- f*=-1;t++;
- }
- for(int i=t;i<=lena-1;i++)
- a[lena-i]=a1[i]-48;//除去符号位后,将字符变成数字,放在对应的int数组里面,进行计算
- t=0;
- if(b1[0]=='-')
- {
- f*=-1;t++;
- }
- for(int i=t;i<=lenb-1;i++)
- b[lenb-i]=b1[i]-48;
- for(int i=1;i<=lena;i++)
- {
- x=0;
- for(int j=1;j<=lenb;j++)
- {
- c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
- x=c[i+j-1]/10;
- c[i+j-1]%=10;
- }
- c[i+lenb]=x;
- }
- lenc=lena+lenb;
- while(c[lenc]==0&&lenc>1)
- lenc--;
- if(f==-1)
- cout<<"-";
- for(int i=lenc;i>=1;i--)
- cout<<c[i];
- cout<<endl;
- }
- return 0;
- }
与POJ的Bull Math,一样