问题描述:
12点又到了,该吃午饭了,小C 瘫在床上不想起床,小A 不想惯着他,于是给他说:“小C,你上星期不是做出了choice 学姐的加法,现在你能做出 choice 学姐的乘法,我就给你带饭。”你能不能帮帮小C。
输入:
两个整数 A 和 B,A和B的长度l(0 <= l <= 1000)。
输出:
多实例测试,输出 A*B 的结果。
样例输入:
4038 5255 55718 7221 8160 104906 3511906 8767574
样例输出:
21219690 402339678 856032960 30790895736044
原因分析:
1.创建三个int 数组,初始化为0,记录长度,将字符串里的每个数存进数组单元里(倒着输入)
2. 每位数相乘, c[i+j-1] + =a[i]*b[j]; c[i+j]+=c[i+j-1]/10; 不要漏 +
3.删除前导0
解决方案:
#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
long long a[1000005];
int main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);string str1,str2;while(cin>>str1>>str2){int a[2000],b[2000],c[5000],i,j,len;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));a[0]=str1.length();b[0]=str2.length();for(i=1;i<=a[0];i++)a[i]=str1[a[0]-i]-'0';for(i=1;i<=b[0];i++)b[i]=str2[b[0]-i]-'0';for(i=1;i<=a[0];i++)for(j=1;j<=b[0];j++){c[i+j-1]+=a[i]*b[j];c[i+j]+=c[i+j-1]/10;c[i+j-1]%=10;}len=a[0]+b[0]+1;while(len>1&&c[len]==0)len--;for(i=len;i>=1;i--)cout<<c[i];cout<<endl;}return 0;
}