CSP-SJ信息学资料下载
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 19379 通过数: 6592
【题目描述】
输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。
【输入】
输入两个高精度正整数M和N。
【输出】
求这两个高精度数的积。
【输入样例】
36
3
【输出样例】
108
【来源】
No
代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=209;
char x[maxn],y[maxn];
int a[maxn],b[maxn],c[2*maxn];//注意积的位数和乘数位数之间的关系
int main()
{
cin>>x>>y;
int len1=strlen(x),len2=strlen(y);
memset(a,0,sizeof a);
memset(b,0,sizeof b);
memset(c,0,sizeof c);
for(int i=len1-1,j=0; i>=0; i--,j++) a[j]=x[i]-'0';
for(int i=len2-1,j=0; i>=0; i--,j++) b[j]=y[i]-'0';
for(int i=0; i<len1; i++)
for(int j=0; j<len2; j++)//模拟乘法将两个数的每一位均和对方相乘,存入对应的结果中。
c[i+j]+=a[i]*b[j];//第i号数相当于其后有i个零,第j号数相当于其后有j个零,所以乘出来的结果中有i+j个零,即存入i+j号位置
int i;
for(i=0; i<2*maxn; i++)//处理进位问题
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[i]==0) i--;
if(i<0) cout<<"0";
for(; i>=0; i--)
cout<<c[i];
cout<<endl;
return 0;
}
来源:CSDN
作者:tianli315
链接:https://blog.csdn.net/tianli315/article/details/104220747