华为练习题系列---超长整数相加

简介: 华为练习题系列---超长整数相加

题目描述

请设计一个算法完成两个超长正整数的加法。

输入描述:

输入两个字符串数字

输出描述:

输出相加后的结果,string型

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
  string addend;
  string augend;
  string ret;
  while (cin >> addend >> augend)
  {
    int sign = 0;//进位标志
    while (1)
    {
      //将两个字符串补齐为等长字符串
      if (addend.size() < augend.size())
      {
        addend = '0' + addend;
      }
      else if (addend.size() > augend.size())
      {
        augend = '0' + augend;
      }
      else
      {
        break;
      }
    }
    int len = addend.size();
    vector<char> ret(len + 1);//保存结果
    int sum = 0;//每位求和结果
    int result = 0;//
    for (int i = len - 1; i > -1; i--)
    {
      int temp1 = addend[i] - '0';//字符转换位数字
      int temp2 = augend[i] - '0';
      sum = sign + temp1 + temp2;
      result = sum % 10;
      sign = sum / 10;
      ret[i + 1] = result + '0';
      if (i == 0)//考虑最高位有进位
      {
        if (sign == 1)
        {
          ret[i] = 1;
        }
        else
        {
          ret[i] = 0;
        }
      }
    }
    if (ret[0] == 1)
    {
      cout << '1';
    }
    for (int i = 1; i < len + 1; i++)
    {
      cout << ret[i];
    }
    cout << endl;
  }
  return 0;
}


相关文章
|
5月前
【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
**NOIP2002普及组题目:求级数$S_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}$超过$k$的最小$n$。给定$1\leq k\leq 15$,输出满足$S_n&gt;k$的$n$。输入$1$个整数$k$,输出相应$n$。例如,输入$1$,输出$2$。代码中使用double确保精度,通过累加求和判断条件找到$n$。**
37 0
|
5月前
|
C++
【洛谷 P1059】[NOIP2006 普及组] 明明的随机数 题解(集合)
**NOIP2006普及组题目**,明明需生成不重复的1-1000间随机整数,输入含两行:第一行是整数N(≤100),第二行是N个随机数。输出两行,第一行是唯一数的个数M,第二行是排序后的唯一数。示例:输入10个数含重复,输出8个不同数排序后结果。解题方法:利用C++的`set`进行去重和排序。
60 0
|
6月前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
PTA第五章7-13 求一批整数中出现最多的个位数字
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
123 0
每日一题---1380. 矩阵中的幸运数[力扣][Go]
每日一题---1380. 矩阵中的幸运数[力扣][Go]
每日一题---1380. 矩阵中的幸运数[力扣][Go]
每日一题---1005. K 次取反后最大化的数组和[力扣][Go]
每日一题---1005. K 次取反后最大化的数组和[力扣][Go]
每日一题---1005. K 次取反后最大化的数组和[力扣][Go]
判断一个数是否为4的整数次幂(2的升级版--双份快乐)
判断一个数是否为4的整数次幂(2的升级版--双份快乐)
华为机试每日一练--第十二题: 查找组成一个偶数最接近的两个素数
华为机试每日一练--第十二题: 查找组成一个偶数最接近的两个素数
华为机试每日一练--第十二题: 查找组成一个偶数最接近的两个素数