您的位置:首页 > 编程语言 > C语言/C++

【高精度算法】A*B 加强版

2016-01-29 15:52 381 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char s[30001];
long long a[15000],b[15000],c[50001];
int main ()
{
int alen,blen,clen;
int i,j,k,m,n;
gets(s);
alen=strlen(s);
k=0;
for(i=alen-1;i>=0;i-=3){
long long tmp=0;
int start;
start=i-2;
if(start<0)start=0;
for(j=start;j<=i;j++)
tmp=tmp*10+s[j]-'0';
a[++k]=tmp;
}
alen=k;

gets(s);
blen=strlen(s);
k=0;
for(i=blen-1;i>=0;i-=3){
long long tmp=0;
int start;
start=i-2;
if(start<0)start=0;
for(j=start;j<=i;j++)
tmp=tmp*10+s[j]-'0';
b[++k]=tmp;
}
blen=k;

for(i=1;i<=alen;i++)
for(j=1;j<=blen;j++)
c[i+j-1]+=a[i]*b[j];
clen=alen+blen;
while(c[clen]==0 && clen>1)
clen--;
for(i=1;i<clen;i++)
if(c[i]>=1000){
c[i+1]+=c[i]/1000;
c[i]%=1000;
}
printf("%lld",c[clen]);
for(i=clen-1;i>=1;i--){
if(c[i]<10)printf("00");
else if(c[i]<100)printf("0");
printf("%lld",c[i]);}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++