1027 大数乘法
1 秒 131,072 KB 0 分 基础题
给出2个大整数A,B,计算A*B的结果。
输入
第1行:大数A
第2行:大数B
(A,B的长度 <= 1000,A,B >= 0)
输出
输出A * B
输入样例
123456
234567
输出样例
28958703552
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
long long a1,b1,h,i,j,k,a[100006],b[100006];
string e,f;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>e>>f;
a1=e.length()-1;
b1=f.length()-1;
else if(e[0]=='-'&&f[0]=='-')//考虑两个数都为负
{
int x=0;
for(i=a1;i>=1;i--)
a[a1-i]=e[i]-'0';
for(i=b1;i>=1;i--)
b[b1-i]=f[i]-'0';
if(a1>b1)//如果a的长度大
{
for(i=0;i<=a1;i++)
{
int c=a[i]+b[i]+x;
a[i]=c%10;
x=c/10;
}
cout<<'-';
if(x>0)
{
a[i]=1;
for(i=a1+1;i>=0;i--)
{
if(a[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<a[i];
}
else
{
for(i=a1-1;i>=0;i--)
{
if(a[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<a[i];
}
}
else //b的长度大
{
for(i=0;i<=b1-1;i++)
{
int c=a[i]+b[i]+x;
b[i]=c%10;
x=c/10;
}
cout<<"-";
if(x>0)
{
b[i]=1;
for(i=b1;i>=0;i--)
{
if(b[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<b[i];
}
else
{for(i=b1-1;i>=0;i--)
{
if(b[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<b[i];
}
}
}
else if(e[0]=='-'&&f[0]!='-')//a为负,b为正
{
if(a1-1>b1||(a1-1==b1&&a[1]-'0'>f[0]-'0'))//a为大数
{
for(i=a1;i>=1;i--)
a[a1-i]=e[i]-'0';
for(i=b1;i>=0;i--)
b[b1-i]=f[i]-'0';
int x=-1;
//cout<<a[0]<<b[0]<<endl;;
for(i=0;i<=a1;i++)
{
int c=a[i]-b[i];
if(c>=0)a[i]=c;
else
{
a[i]=10+c;
a[i+1]=a[i+1]-1;
}
}
cout<<'-';
for(i=a1-1;i>=0;i--)
{
if(a[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<a[i];
}
else //b长
{
for(i=a1;i>=1;i--)
a[a1-i]=e[i]-'0';
for(i=b1;i>=0;i--)
b[b1-i]=f[i]-'0';
int x=-1;
//cout<<a[0]<<b[0]<<endl;;
for(i=0;i<=b1;i++)
{
int c=b[i]-a[i];
if(c>=0)b[i]=c;
else
{
b[i]=10+c;
b[i+1]=b[i+1]-1;
}
}
//cout<<'-';
for(i=b1;i>=0;i--)
{
if(b[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<b[i];
}
}
else if(a[i]!='-'&&f[0]=='-')//b为负,a为正
{
if(b1-1>a1)//b为大数
{
for(i=a1;i>=0;i--)
a[a1-i]=e[i]-'0';
for(i=b1;i>=1;i--)
b[b1-i]=f[i]-'0';
int x=-1;
//cout<<a[0]<<b[0]<<endl;;
for(i=0;i<=b1;i++)
{
int c=b[i]-a[i];
if(c>=0)b[i]=c;
else
{
b[i]=10+c;
b[i+1]=b[i+1]-1;
}
}
cout<<'-';
for(i=b1-1;i>=0;i--)
{
if(b[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<b[i];
}
else //a长
{
for(i=a1;i>=0;i--)
a[a1-i]=e[i]-'0';
for(i=b1;i>=1;i--)
b[b1-i]=f[i]-'0';
int x=-1;
//cout<<a[0]<<b[0]<<endl;;
for(i=0;i<=a1;i++)
{
int c=a[i]-b[i];
if(c>=0)a[i]=c;
else
{
a[i]=10+c;
a[i+1]=a[i+1]-1;
}
}
//cout<<'-';
for(i=a1;i>=0;i--)
{
if(a[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<a[i];
}
}
else //a,b同时为正
{
int x=0;
for(i=a1;i>=0;i--)
a[a1-i]=e[i]-'0';
for(i=b1;i>=0;i--)
b[b1-i]=f[i]-'0';
if(a1>b1)//a的长度大
{
for(i=0;i<=a1;i++)
{
int c=a[i]+b[i]+x;
a[i]=c%10;
x=c/10;
}
//cout<<'-';
if(x>0)
{
a[i]=1;
for(i=a1+1;i>=0;i--)
{
if(a[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<a[i];
}
else
{
for(i=a1;i>=0;i--)
{
if(a[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<a[i];
}
}
else//b的长度大
{
for(i=0;i<=b1;i++)
{
int c=a[i]+b[i]+x;
b[i]=c%10;
x=c/10;
}
//cout<<'-';
if(x>0)
{
b[i]=1;
for(i=b1+1;i>=0;i--)
{
if(b[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<b[i];
}
else
{
for(i=b1;i>=0;i--)
{
if(b[i]!=0){
k=i;
break;
}
}
for(i=k;i>=0;i--)
cout<<b[i];
}
}
}
return 0;
}