大数加法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数加法相关的知识,希望对你有一定的参考价值。

 要点:
1)运算顺序:两个数靠右对齐;从低位向高位运算;先计算低位再计算高位; (2)运算规则:同一位的两个数相加,然后再加上从低位来的进位,成为该位的和;    这个和再去掉向高位的进位就成为该位的值;如上例:3+8+1=12,向前一位进1(用 / 取整得到),本位的值是2(用 % 得到); (3)最后一位的进位:如果完成两个数的相加后,进位位值不为0,则应添加一位; (4)如果两个加数位数不一样多,则按位数多的一个进行计算;

 

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;

int main()
{
    char a[1005];
    char b[1005];
    int aa[1005];
    int bb[1005];
    int c[1005];
    while(~scanf("%s %s",&a,&b))
    {
        memset(aa,0,sizeof(aa));///清空aa数组,避免因为初始化而加错值
        memset(bb,0,sizeof(bb));///清空aa数组

        ///计算两个加数的长度
        ///如果两个加数位数不一样多,则按位数多的一个进行计算
        int lena = strlen(a);
        int lenb = strlen(b);

        ///把加数 字符数组变成整型,
        ///而且因为计算的时候是又最低位开始计算,
        ///所以变成整型的时候改变一下顺序
        ///即 char 型 aa=123456 放到整型里即a[5] = b [0]- ‘0‘ ; a[4] = b[1]-‘0‘
        for(int i = 0; i < lena; i++)
        {
            aa[lena-1-i] = a[i]-0;
        }

        for(int i = 0; i < lenb; i++)
        {
            bb[lenb-1-i] = b[i]-0;
        }

        int lenc = max(lena,lenb);
        int jinwei = 0;
        for(int i = 0 ; i < lenc ; i++)
        {
            c[i] = (aa[i] + bb[i] + jinwei) % 10;
            jinwei = (aa[i] + bb[i] + jinwei) / 10;
        }

        if(jinwei != 0)
        {
            c[lenc++] = jinwei ; ///第一次即长度的值,之后才会自加
        }


        for(int i = lenc - 1; i >= 0; i--)
        {
            printf("%d",c[i]);
        }
        puts("");
    }
    return 0;
}

 

技术分享


以上是关于大数加法的主要内容,如果未能解决你的问题,请参考以下文章

大数加法和大数乘法

大数加法 (A + B Problem II)

大数加法

51nod 1005 大数加法

牛客Top200---大数加法(java详解)

大数加法大数乘法