首页 > 其他 > 详细

北京大学机试 浮点数加法 Easy *字符串加和,注意补全的简便方法

时间:2020-03-11 10:20:55      阅读:56      评论:0      收藏:0      [点我收藏+]

基本思想:

如果采用补全,可以有效减少长度;

 

关键点:

无;

 

#include<iostream>
#include<vector>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;

vector<string> charge(string s) {
	int index;
	string b;
	vector<string>vec;
	stringstream ss(s);
	while (getline(ss, b, ‘.‘)) {
		vec.push_back(b);
	}
	return vec;
}

string add(string a, string b,int &ca) {
	int max = -1;
	string rn="";
	if (a.size() > b.size()) {
		max = b.size();
		rn = a.substr(max, a.size() - max);
	}
	else if(a.size()<b.size()){
		max = a.size();
		rn = b.substr(max, b.size() - max);
	}
	else {
		max = a.size();
	}
	int carry = 0;
	string res="";
	for (int i = max - 1; i >= 0; i--) {
		int temp = (a[i] - ‘0‘) + (b[i] - ‘0‘) + carry;
		res = char(‘0‘ + temp % 10)+res;
		carry = temp / 10;
	}
	ca = carry;
	res += rn;
	while (res.size()!=0&&res[res.size() - 1] == ‘0‘)
		res.pop_back();
	return res;
}

string add_in(string a, string b,int cn) {
	reverse(a.begin(), a.end());
	reverse(b.begin(), b.end());
	int carry = cn;
	string res = "";
	for (int i = 0; i < a.size() && i < b.size(); i++) {
		int temp= (a[i] - ‘0‘) + (b[i] - ‘0‘) + carry;
		res = res + char(‘0‘ + temp % 10);
		carry = temp / 10;
	}
	if (res.size() < a.size()) {
		for (int i = res.size(); i < a.size(); i++) {
			if (carry == 0)
				res += a[i];
			else {
				int temp = (a[i] - ‘0‘) + carry;
				res += char(‘0‘ + temp % 10);
				carry = temp / 10;
			}
		}
		if (carry != 0)
			res += ‘1‘;
	}
	else if (res.size() < b.size()) {
		for (int i = res.size(); i < b.size(); i++) {
			if (carry == 0)
				res += b[i];
			else {
				int temp = (b[i] - ‘0‘) + carry;
				res += char(‘0‘ + temp % 10);
				carry = temp / 10;
			}
		}
		if (carry != 0)
			res += ‘1‘;
	}
	else {
		if (carry != 0)
			res += ‘1‘;
	}
	reverse(res.begin(), res.end());
	return res;
}

int main() {
	string s1, s2;
	while (cin >> s1 >> s2) {
		vector<string>ss1 = charge(s1);
		vector<string>ss2 = charge(s2);
		int carry = 0;
		string res = add(ss1[1], ss2[1], carry);
		string res_in = add_in(ss1[0], ss2[0], carry);
		cout<<res_in<< "." << res << endl;
	}
}

  

北京大学机试 浮点数加法 Easy *字符串加和,注意补全的简便方法

原文:https://www.cnblogs.com/songlinxuan/p/12460027.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!