精度计算---大数乘大数(数学问题)

input:输入两个大数

output:输出其结果

 

思路:

      设置一个二维数组,和一个一维数组,将两个大数相乘对应的值存在二维数组中,然后相加,去摸得到最后一个值,存入一维数组中,

然后就是处理最后一个高位,记住进位!

代码:

  

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 void mult(char a[],char b[],char s[]){
 5     int i,j ,k = 0,alen,blen,sum=0,res[65][65]={0},flag=0;
 6     char result[65];
 7          alen = strlen(a);
 8          blen = strlen(b);
 9          for(i=0;i<alen;i++)                             //最高六十五位   位数相乘,以二维数组的方式存储 
10             for(j=0;j<blen;j++)
11                res[i][j] = (a[i]-'0')*(b[j]-'0');//res 存储这每一位的结果 
12          
13          for(i=alen-1;i>=0;i--){  //进位计算 ,大于10进位,然后将其余存在result【】数组中 
14              for(j=blen-1;j>=0;j--)
15                 sum = sum+res[i+blen-j-1][j];
16                 result[k]=sum%10;//result 存储这每一位的结果 
17                 k=k+1;
18                 sum = sum/10;//将高位继续往上传 
19          }
20          
21          for(i=blen-2;i>=0;i--){    // 将每位加起来,然胡放到sum,将个位存在result中 
22              for(j=0;j<=i;j++)
23                 sum = sum+res[i-j][j];
24                 result[k] = sum%10;
25                 k=k+1;
26                 sum=sum/10;
27          }   
28          
29          if(sum!=0){    //处理最后一位 
30              result[k] =sum;
31              k=k+1;
32          }
33          
34          for(i=0;i<k;i++)
35            result[i] +='0';
36          
37          for(i=k-1;i>=0;i--)     //将结果传值给s中 
38             s[i] =result[k-1-i]; 
39          
40          s[k] = '\0';
41          
42          while(1){
43              if(strlen(s)!=strlen(a) && s[0] == '0')
44                  strcpy(s,s+1);
45               else
46                  break;   
47          }   
48     
49 }
50 
51 int main(){
52     char s1[100]={0},s2[100]={0},output[200]={0};
53     scanf("%s %s",s1,s2);
54     mult(s1,s2,output);
55     printf("the result is %s\n",output);
56     return 0;
57 }

 

posted on 2014-10-20 18:20  lzm420241  阅读(125)  评论(0)    收藏  举报

导航