- 高精度乘法
- 2016-12-24 15:39:24 @
明明在自己做的各种数据都可以过。。。为什么会只过第二点,我也找不出错误,求神犇帮忙
```c++
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int l1,l2,l,n,i,j,k,x,x1,ll,ll1,ll2;
int a[15000],b[15000],ans[50000];
char s1[15000],s2[15000];
int main()
{
{
scanf("%s%s",s1,s2);
//============================以下为初始化
ll1=strlen(s1);ll2=strlen(s2);
l1=0;l2=0;
for (i=ll1-1;i>=0;i--)//s1压4位转存为数组
{
x1=int(s1[i])-48;
ll++;
for (j=1;j<=ll-1;j++)
x1*=10;
x+=x1;
if ((x>=1000)||(i==0))//满4位存入一次
{
l1++;
a[l1]=x;
ll=0;
x=0;
}
}
for (i=ll2-1;i>=0;i--)//转存s2,同上
{
x1=int(s2[i])-48;
ll++;
for (j=1;j<=ll-1;j++)
x1*=10;
x+=x1;
if ((x>=1000)||(i==0))//同上
{
l2++;
b[l2]=x;
ll=0;
x=0;
}
}
//=================
for (i=1;i<=l1;i++)//计算过程(包括进位)
for (j=1;j<=l2;j++)
{
ans[i+j-1]=ans[i+j-1]+(a[i]*b[j]);
ans[i+j]=ans[i+j]+(ans[i+j-1]/10000);
ans[i+j-1]=ans[i+j-1]%10000;
}
l=l1+l2;
while (ans[l]==0)
l--;//处理位数
//==================输出
printf("%d",ans[l]);
for (i=l-1;i>=1;i--)
printf("%.4d",ans[i]);
}
}
```
1 条评论
-
垃圾,没有之一 (·) LV 7 @ 2018-02-27 13:59:42
RE还是TLE
- 1