大整数相加

原创 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++之练习题33

1.n 位的一个整数是循环数(cyclic)的条件是:当用一个 1 到 n 之间的整数去乘它时,会得到一个将原来的数首尾相接循环移动若干数字再在某处断开而得到的数字。也就是说, 如果把原来的数字和新...

大整数加法

总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的和。 输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。...

大整数相乘与相加的代码

  • 2007年11月19日 20:02
  • 1KB
  • 下载

超级大整数相加.zip

  • 2009年06月04日 21:12
  • 1KB
  • 下载

MySQL实现大整数相加的udf

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

php的大整数相加111

  • 2008年10月31日 09:07
  • 3KB
  • 下载

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

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

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

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

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

对于两个大整数字符串相加,很多语言提供了原生支持。 比如Java,提供了BigInteger类,而JS这方面是没有支持的,实现就要靠咋们自己了。 下面这个字符串相加函数,接收两个字符串参数,并返回...
  • esir82
  • esir82
  • 2016年11月23日 16:07
  • 369
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大整数相加
举报原因:
原因补充:

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