大整数相加

原创 2016年05月30日 22:26:16

问题描述:求两个不超过200位的非负整数的和。

输入:有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

输出:一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入:

22222222222222222222

33333333333333333333

样例输出:

55555555555555555555


完整代码:

#include <iostream>
#include <string.h>

int main()
{
    unsigned a1[200] = {0}, a2[200] = {0};
    char s1[200] = {'0'}, s2[200] = {'0'}, s[200] = {'0'};
    int j = 0, a, b, max;

    gets(s1);
    gets(s2);
//确定和的最大长度(两个字符串中较长的那个长度大小);

    a = strlen(s1), b = strlen(s2);
    max = b;if (a >= b) max = a;
//将字符串逆序依次变成数字,这样问题就转化成两个个位数相加;

    for (int i(strlen(s1) - 1); i >= 0; --i)
        a1[j++] = s1[i] - '0';
    j = 0;
    for (int i(strlen(s2) - 1); i >= 0; --i)
        a2[j++] = s2[i] - '0';
//计算,按位对数字数组进行运算,然后存到相应字符数组里(数字字符和数字中间的差为‘0’(48),转换的时候按需加减就好);

    for (j = 0; j != max; ++j)
    {
//相加取余为当前元素(7,8 当前元素就为5):
        s[j] = (s[j] - '0' + (a1[j]+a2[j])%10 + '0');
//如果相加之后的结果大于‘10’,则需进位,到下一位上:
	s[j+1] =(a1[j]+a2[j])/10+'0';
//可能会出现运算完成之后当前元素为‘10’的情况,可是并没有这个元素这个时候会出错显示‘:’,这个时候需要将当前置为0,然后向上进位
        if (s[j] == 58) { s[j] = '0'; s[j+1]++;}
    }
//如果最后一个的下一个元素结果不为‘0’,说明两数相加产生进位有了比之前更大的位数,这是要把和的长度在原有基础上变大
    if (s[j] != '0') max++;
//因为使用字符数组的逆序整形数组运算,所以结果刚好相反,逆序输出存放计算结果的字符串就好:

    for (j = max-1; j >= 0; --j)
        std::cout << s[j];
    std::cout << std::endl;

    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

MySQL实现大整数相加的udf

前提,大整数保存为varchar, char暂时还不行,还需改进 bigint.h头文件 #include #include #include   #define N 4   #ifdef      ...

用栈实现大整数的相加与相减

#include using namespace std; #define MAXSIZE 100 typedef int Selemtype; typedef int Status; #defin...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C++实现两个大整数相加

#include #include #include using namespace std; int main() { string A, B, Sum; cin >> A; ci...

JavaScript趣题:大整数字符串相加

对于两个大整数字符串相加,很多语言提供了原生支持。 比如Java,提供了BigInteger类,而JS这方面是没有支持的,实现就要靠咋们自己了。 下面这个字符串相加函数,接收两个字符串参数,并返回...

hdoj1047 Integer Inquiry(大整数的相加)

思路很简单,但感觉我做复杂了(┬_┬) 其实可以直接写一个两个大整数相加的函数,输入一个大整数就加一次。而我直接就输入所有数据,然后对全部数据一起处理,不仅耗费内存还耗费时间。 我的代码: #i...
  • CqZtw
  • CqZtw
  • 2017-06-01 20:38
  • 57

C++解决大整数相加问题

C++解决超大整数相加问题 读入俩个大整数,将他们分别放在俩个字符串中,申明第三个字符串用来保存结果。 从俩个字符串的末位开始相加,若大于10则向前进一位,他们的模数作为该位的结果,若不大于10...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)