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

基本思想:

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

关键点:

无;

#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;
	}
}

  

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12460027.html