题解 | #浮点数加法#

浮点数加法

http://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8

#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
//整数部分
string stradd(string p1, string p2, string q1,string  q2) {
	string res = "";
	string ls, ss;
	if (q1.size() >= q2.size()) {
		ls = q1; ss = q2;
	}
	else {
		ls = q2; ss = q1;
	}
	int carry = 0;
	for (int i = ss.size() - 1; i >= 0; i--) {
		//if (i == 0 && carry == 1)break;
		if (ss[i] - '0' + ls[i] - '0' + carry <= 9) {
			ls[i] = ss[i] - '0' + ls[i] + carry;
			carry = 0;
		}
		else {
			ls[i] = ss[i] - '0' + ls[i] + carry - 10;
			carry = 1;
		}
	}
	res += '.';
	res += ls;
	
	if (p1.size() >= p2.size()) {
		ls = p1; ss = p2;
	}
	else {
		ls = p2; ss = p1;
	}
	reverse(ls.begin(), ls.end());
	reverse(ss.begin(), ss.end());
	int i = 0;
	for (; i < ss.size(); i++) {
		if (ss[i] - '0' + ls[i] - '0' + carry <= 9) {
			ls[i] = ss[i] - '0' + ls[i] + carry;
			carry = 0;
		}
		else {
			ls[i] = ss[i] - '0' + ls[i] + carry - 10;
			carry = 1;
		}
	}
	while (carry == 1) {
		if (i == ls.size() && carry == 1) {
			ls.insert(0, "1");
			carry = 0;
		}
		if (ls[i] - '0' + carry <= 9) {
			ls[i] = ls[i] + carry;
			carry = 0;
		}
		else {
			ls[i] = ls[i] + carry - 10;
			carry = 1;
		}
		i++;
	}

	reverse(ls.begin(), ls.end());
	res.insert(0, ls);
	
	return res;
}
int main() {
	string s1, s2;
	cin >> s1 >> s2;
	string p1, q1, p2, q2;//p整数部分,q小数部分
	p1 = s1.substr(0, s1.find('.', 0));
	p2 = s2.substr(0, s2.find('.', 0));
	q1 = s1.erase(0, p1.size() + 1);
	q2 = s2.erase(0, p2.size() + 1);
	cout << stradd(p1, p2, q1, q2) << endl;
	return 0;
}
全部评论

相关推荐

ResourceUtilization:四六级不愧是大学最有用的证之一
点赞 评论 收藏
分享
Rena1ssance_:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务