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

input: 大数 c,小数m(限10以内)

 

output:两数相乘的结果s

 

思路:

     利用数组,将大数位数存储下来,然后通过最小位乘以大数由低到高位的数,然后存入一个新的数组,但是一个点需要注意,最后的最高位,可能大于10,所以记得

结束的时候需要再判断一下最高位,并存储。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 /*
 5   char c[]    input the big digital
 6   int m       input the small digital
 7   char t[]    output the result
 8 */
 9 
10 void mult(char c[],char t[],int m){
11     int i,l,k,flag,add = 0;
12     char s[100];   
13          l = strlen(c);
14          for(i = 0;i<l;i++)
15             s[l-i-1] = c[i] - '0';   //将大数倒置,存入数组s中 
16          for(i=0;i<l;i++){         // 通过从最低位与m相乘得到最低位,然后将个位存在相应数组,其他书进位,放到add中 
17              k = s[i]*m+add;
18              if(k >= 10){
19                  s[i]=k%10;
20                  add =k/10;
21                  flag =1;
22              }
23              else{
24                  s[i] = k;
25                  flag = 0;
26                  add = 0;
27              }
28              
29          }   
30          if(flag){    // 最高位如果大于十,则将其进位 
31              l = i+1;
32              s[i] = add;
33          }
34          else  l = i;
35          for(i=0;i<l;i++)    // 然后将其位置换回来 
36            t[l-1-i] = s[i]+'0';
37          t[l]='\0';  
38 
39 }
40 
41  int main(){
42      char input[100]={0},output[100]={0};
43      int c;
44  //    memset(input,0,sizeof(input));
45  //    memset(output)
46     scanf("%s %d",input,&c);
47     mult(input,output,c);
48     printf("the result is %s\n",output); 
49      return 0;
50  } 

 

posted on 2014-10-20 16:21  lzm420241  阅读(427)  评论(0)    收藏  举报

导航