大数乘法问题

来源:互联网 发布:淘宝联盟手机可以提现 编辑:程序博客网 时间:2024/06/06 12:34
大数乘法问题 - 天羽 - 天羽的博客
 
 
#include<stdio.h>
#include<string.h>
#define MAXLEN 200
int main()
{
      int a[MAXLEN+10],b[MAXLEN+10],len1,len2,c[2*MAXLEN+10],i,j;
     char str1[MAXLEN+10],str2[MAXLEN+10];
     for(i=0;i<MAXLEN+10;i++) a[i]=b[i]=0;//将a,b两个数组都置为零
     for(i=0;i<2*MAXLEN+10;i++) c[i]=0;//将c置为零
     //scanf("%s %s",str1,str2);
     gets(str1);
     gets(str2);//以字符的形式读入两个乘数
     len1=strlen(str1);
     len2=strlen(str2);
     for(i=len1-1,j=0;i>=0;i--)//将字符型数转换成数字,低位存在数组的低位
         a[j++]=str1[i]-'0';
     for(i=len2-1,j=0;i>=0;i--)
         b[j++]=str2[i]-'0';//同上
     for(i=0;i<len2;i++)//循环相乘,用第二个数的每一位去乘以第一个数,a的第i位乘以b的第j位之后存在c的第i+j位上
         for(j=0;j<len1;j++)
            c[i+j]+=b[i]*a[j];
     for(i=0;i<len1+len2+2;i++)//处理进位问题,如果大于10,则进位
         if(c[i]>=10)
         {
                c[i+1]+=c[i]/10;
               c[i]%=10;
         }
     //printf("%s * %s = ",str1,str2);  
     for(i=len1+len2+2;(c[i]==0)&&(i>=0);i--);//过滤掉高位的数字零,使之不输出
     if(i>=0)
         for(;i>=0;i--)
             printf("%d",c[i]);
     else printf("0");
     printf("\n");
     system("pause");
     return 0;
}    
                         
 
     
 
原创粉丝点击