文章
7
粉丝
502
获赞
2
访问
16.4k
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string a, string b)
{
if (a.length() < b.length()) a.swap(b);//a为较长的字符串
string ans(a.length(), 0);//初始化长度为较长字符串的长度
b.insert(0, a.length() - b.length(), '0');//短字符串前面补零,长度相等方便计算
/*s.insert(a, b, c)表示在s字符串的a位置前插入b个字符c*/
int c = 0;//进位
for (int i = a.length() - 1; i >= 0; i--)//从末尾开始逐位运算
{
int sum = (a[i] - '0') + (b[i] - '0') + c ;//计算当前位相加结果,要加上一位的进位值
c = sum / 10;//按照十进制运算的规则,当前位相加结果大于等于10,则需要进位,进位的值即为当前相加结果除以10的商。
//如99 + 98,9 + 8 = 17,进位为 17 / 10 = 1
ans[i] = sum % 10 + 48;
/*I.计算了当前位相加后应显示的结果,并将结果转换为字符存储到结果字符串 ans 的相应位置。
II.由于通常的十进制运算下,每位数字的取值范围为 0 到 9,因此对10取模可以得到当前位的值,
如99 + 98, 个位的9 + 8 = 17,进位为1,显示的结果为 17 % 10 = 7
III.运算的结果再加上字符 '0' 的 ASCII 值,或是 + '0', 即可得到该位对应的字符表示*/
}
if (c != 0)
ans.insert(ans.begin(), c + 48);//如果最高位有进位,将进位加到结果的最前面
...
登录后发布评论
暂无评论,来抢沙发