问题 E: 高精度求积
时间限制: 1 Sec 内存限制: 128 MB
提交: 212 解决: 50
[提交][状态][讨论版][命题人: cbc]
题目描述
输入两个高精度正整数M和N(M和N均小于100位),求这两个高精度数的积。
样例输入
36
3
样例输出
108
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>
#include<stdio.h>
#include<string>
#include<cstring>
using namespace std;
int multiply(long long b[],int a,long long c[],long long c1[],int i,int len1,int len)
{
int j=0,z,x=0,y,l;
long long c2[10000];
memset(c2,0,sizeof(c2));
while(j<len1 || c2[j]!=0 )
{
z=b[j]*a+x;
x=z/10;y=z%10;
c1[j]=y;
if(z>9)
{c2[j+1]=1;}
c[i+j]+=c1[j];
if(c[i+j]>9)
{
c[i+j+1]+=1;
c[i+j]%=10;
}
j++;
}
if(c[i+j]!=0)
j++;
return i+j;
}
int main()
{
long long a[10000],b[10000],c[10000],c1[10000];
char m[105],n[105],ch,ch1;
int i,len,len1,l;
while(scanf("%s%c%s%c",&m,&ch,&n,&ch1)!=EOF)
{
len=strlen(m);len1=strlen(n);
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=len-1;i>=0;i--)
a[len-1-i]=m[i]-'0';
for(i=len1-1;i>=0;i--)
b[len1-1-i]=n[i]-'0';
for(i=0;i<len;i++)
{
memset(c1,0,sizeof(c1));
int x=a[i];
l=multiply(b,x,c,c1,i,len1,len)-1;
}
int sign=0;
for(i=l;i>=0;i--)
if(c[i]!=0)
sign=1;
if(sign==1)
{
for(i=l;i>=0;i--)
cout << c[i];
}
else
printf("0");
cout << "\n" ;
}
return 0;
}