2019/3/21高精度乘法
题目描述:
给出两个长度小于100位的正整数,求其乘积。
输入描述:
两行,一行一个数。
输出描述:
一行,为所求乘积。
样例输入:
1937
2931
样例输出:
5677347
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char ch[100];
char sh[100];
int ah[200]={0};
int bh[200]={0};
int gh[200]={0};
while(cin>>ch>>sh){
int len1=strlen(ch);
int len2=strlen(sh);//当做字符串读入
int i;
for(i=len1-1;i>=0;i--)
ah[len1-1-i]=ch[i]-'0';//逆序读入数组,左对齐
for(i=len2-1;i>=0;i--)
bh[len2-1-i]=sh[i]-'0';
int temp,k,j;
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
{
temp=ah[i]*bh[j];
gh[i+j]+=temp; //注意:gh为结果存储地址,所以为i+j
k=i+j;
while(gh[k]>=10) //向前遍历直到没有进位完毕
{
gh[k+1]+=(gh[k]/10);
gh[k]%=10;
k++;
}
}
int flag=0;
for(i=199;i>=0;i--) //从后往前输出,注意0的输出
{
if(gh[i]!=0 || flag==1)
{
cout<<gh[i];
flag=1;
}
}
cout<<endl;}
return 0;
}