微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数加法和乘法

大数乘法:

  • /******************************* 
  • *大整数的乘法 
  • *输入两个小于100位的整数值整数值
  • *输出值:两个整数的乘积
  • *******************************/ 

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    char a[100],b[100];
    int la,lb,n;
    int i,j;
    while(scanf("%s%s",&a,&b) != EOF) {
    int c[200] = {0};
    la = strlen(a);
    lb = strlen(b);
    n = la + lb - 1;//相乘之后的位数,最后可能因为进位再加上一位
    for(i = 0; i < n; i++) {
        
    for(j = 0; j <= i && j <= la - 1 ; j++)//需要累加如A0A1A2 * B0B1 = B0*A0 + (B1*A0 + B0* A1) + (B1*A1 + B0*A2) + B1*A2
    {    
    if (i - j > lb - 1) continue;    
    c[i + 1] += (a[j] - '0') * (b[i - j] - '0');
    }
    }
    for (i = n ; i > 0; i--) {  //处理进位 
        c[i - 1] += c[i] / 10;
        c[i] = c[i] % 10;
    }
    for (i = 0; c[i] == 0 && i <= la + lb - 1 ; i++);//排除第零位可能没有进位的情况
    for(; i <= n; i++)
    {
        printf("%d",c[i]);
    }
    printf("\n");
    }
    return 0;
    }


    大数加法:


    1. #define MAX 110 

    2. /******************************* 
    3. *大整数的加法 
    4. *参数:s1,s2为两个以字符串存储的加数 
    5. *返回值:无 
    6. *******************************/  
    7. char result[MAX];  
    8. void big_num_add(char * s1,char * s2)  
    9. {  
    10.     int max_len,len1,len2;  
    11.     int i,k;  
    12.     char * a;  
    13.     char * b;  
    14.   
    15.     len1 = strlen(s1);  
    16.     len2 = strlen(s2);  
    17.     max_len = len1 > len2?len1 : len2;  
    18.   
    19.     a = (char *)malloc(max_len + 1);//暂存s1  
    20.     b = (char *)malloc(max_len + 1);//暂存s2  
    21.   
    22.     memset(a,max_len + 1);  
    23.     memset(b,max_len + 1);  
    24.   
    25.     k = 0;  
    26.     for(i = len1 - 1;i >= 0;i--) a[k++] = s1[i] - '0';//倒置存放  
    27.   
    28.     k = 0;  
    29.     for(i = len2 - 1;i >= 0;i--) b[k++] = s2[i] - '0';//倒置存放  
    30.   
    31.     for(i = 0;i < max_len;i++)  
    32.     {  
    33.         a[i] += b[i];  
    34.         if(a[i] > 9)  
    35.         {  
    36.             a[i] = a[i] - 10;  
    37.             a[i + 1]++;  
    38.         }  
    39.     }  
    40.     if(a[max_len] != 0) max_len++;  
    41.   
    42.     k = 0;  
    43.     for(i = max_len - 1;i >= 0;i--) result[k++] = a[i] + '0';  
    44.     result[k] = '\0';  
    45.     free(a);  
    46.     free(b);  
  • 版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

    相关推荐