高精度 A*B Problem

题目:请戳此处

#include<stdio.h>
#include<stdlib.h> 
#include<string.h>
char s[30000],l[30000];
long long a[30001],b[30001],c[60000],al,bl,cl,i,j,x;
int main()
{gets(s);
 al=strlen(s);
 for (i=0;i<(5-al%5)%5;i++){
   strcpy(l,s);
   strcpy(s,"0");
   strcat(s,l);
 }
 if (al%5!=0) al=(al/5+1)*5;
 for (i=0;i<al/5;i++)
   a[i+1]=(s[al-i*5-1]-'0')+(s[al-i*5-2]-'0')*10+(s[al-i*5-3]-'0')*100+(s[al-i*5-4]-'0')*1000+(s[al-i*5-5]-'0')*10000;
 gets(s);
 bl=strlen(s);
 for (i=0;i<(5-bl%5)%5;i++){
   strcpy(l,s);
   strcpy(s,"0");
   strcat(s,l);
 }
 if (bl%5!=0) bl=(bl/5+1)*5;
 for (i=0;i<bl/5;i++)
   b[i+1]=(s[bl-i*5-1]-'0')+(s[bl-i*5-2]-'0')*10+(s[bl-i*5-3]-'0')*100+(s[bl-i*5-4]-'0')*1000+(s[bl-i*5-5]-'0')*10000;
 for (i=1;i<=bl/5;i++) 
   for (j=1;j<=al/5;j++)
     c[i+j-1]=c[i+j-1]+a[j]*b[i];
 for (i=1;i<=al/5+bl/5;i++){
   c[i+1]=c[i+1]+c[i]/100000;
   c[i]=c[i]%100000;  
 }
 x=0;
 for (i=al/5+bl/5;i>0;i--){
   if (c[i]!=0 && x==0){
     x=1; cl=i;
   }
   if (x){    
     if(i<cl){
       if (c[i]<10) printf("0");
       if (c[i]<100) printf("0");
       if (c[i]<1000) printf("0");
       if (c[i]<10000) printf("0");
     }
     printf("%d",c[i]);
   }
 }
 if (x==0) printf("0");
 puts("");
 return 0;
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值