高精度乘法加强

来源:互联网 发布:二叉树的遍历算法代码 编辑:程序博客网 时间:2024/04/29 08:06

转自http://blog.csdn.net/cm_yali/article/details/50607751

#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;  }  


0 0
原创粉丝点击