大数乘法

用数组做了一个大数乘法的算法,很粗糙,但很实用

  1 #include <apue.h>
  2 #define  MAX   100
  3 
  4 void  my_mulity(char *buf1, char *buf2);
  5 
  6 void  my_mulity(char *buf1, char *buf2)
  7 {
  8     int len1 = 0;
  9     int len2 = 0;
 10     int i = 0;
 11     int j = 0;
 12     int len = 0;
 13 
 14     len1 = strlen(buf1);
 15     len2 = strlen(buf2);
 16     len = len1 + len2;
 17 
 18     int *result = (int *)malloc(sizeof(int) * len) ;
 19     if(result == NULL){
 20         return ;
 21     }

22 
 23     for(i = 0; i < len; i++){
 24         result[i] = 0;
 25     }
 26 
 27     for(i = 0; i < len1; i++){
 28         for(j = 0; j < len2; j++){
 29             result[i + j + 1] += (buf1[i] - '0')*(buf2[j] - '0');//为何i+j+1呢?对应起来
 30         }
 31     }

 32 
 33     for(i = len - 1; i >= 0; i--){
 34         if(result[i] >= 10){
 35             result[i] = result[i] % 10;   //进行进位和取余
 36             result[i - 1] += result[i]/10;
 37         }
 38     }
 39     i = 0;
 40     while(result[i] == 0) i++;    //防止一开始是0
 41     printf("result:\n");
 42     for(j = i; j < len; ++j){
 43          printf("%d", result[j]);
 44     }
 45 
 46 }
 47 
 48 int main(int ac, char **av)
 49 {
 50     char buf1[MAX] = {0};
 51     char buf2[MAX] = {0};
 52 
 53     printf("please input : mulitied\n");
 54     scanf("%s", buf1);
 55     printf("please input : mulitied\n");
 56     scanf("%s", buf2);
 57 
 58     my_mulity(buf1, buf2);
 59     printf("\n");
 60     return 0;
 61 }

你可能感兴趣的:(大数乘法)