字符串相加

给定两个字符串形式的非负整数 num1num2 ,计算它们的和。(力扣415题)

这一题看到评论区有一个精妙的算法。

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

class Solution 
{
	public:
		string addStrings(string num1, string num2) 
		{
			string str;
			int cur = 0, i = num1.size()-1, j = num2.size()-1;
			while (i >= 0 || j >= 0 || cur != 0)//将进位值也设为循环条件 
			{
				if (i >= 0) cur += num1[i--] - '0';
				if (j >= 0) cur += num2[j--] - '0';
				str += to_string (cur % 10);
				cur /= 10;
			}
			reverse(str.begin(), str.end());
			return str;
		}
};


int main()
{
	Solution s;
        string num1("999999999"), num2("1");
	cout<<s.addStrings(num1, num2)<<endl;
	return 0;
}

 运行结果

 

 这个方法的精妙之处在于它将各位相加的值和进位值放在一起相加,而且将进位值也设为循环条件,这样就可以在两个数字不一样长的情况下,短字符最后一位相加后有进位的情况。

posted @ 2019-12-19 14:19  C_hp  阅读(882)  评论(0编辑  收藏  举报