题解 | #排序#

浮点数加法

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

#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
using namespace std;

struct Float {
	vector<int> Integer;
	vector<int> Decimal;
};

void Print(Float x) {
	for (int i = 0; i < x.Integer.size(); i++) {
		cout << x.Integer[i];
	}
	cout << ".";
	for (int i = 0; i < x.Decimal.size(); i++) {
		cout << x.Decimal[i];
	}
	cout << endl;
}

Float Add(Float x, Float y) {
	int n;
	if (x.Decimal.size() > y.Decimal.size()) {
		n = x.Decimal.size() - y.Decimal.size();
		for (int i = 0; i < n; i++) {
			y.Decimal.push_back(0);
		}
	}else if (x.Decimal.size() < y.Decimal.size()) {
		n = y.Decimal.size() - x.Decimal.size();
		for (int i = 0; i < n; i++) {
			x.Decimal.push_back(0);
		}
	}
	if (x.Integer.size() > y.Integer.size()) {
		n = x.Integer.size() - y.Integer.size();
		for (int i = 0; i < n; i++) {
			y.Integer.insert(y.Integer.begin(), 0);
		}
	}else if (x.Integer.size() < y.Integer.size()) {
		n = y.Integer.size() - x.Integer.size();
		for (int i = 0; i < n; i++) {
			x.Integer.insert(x.Integer.begin(), 0);
		}
	}
	int in = 0;
	for (int i = x.Decimal.size() - 1; i >= 0; i--) {
		x.Decimal[i] = x.Decimal[i] + y.Decimal[i] + in;
		if (x.Decimal[i] >= 10) {
			x.Decimal[i] -= 10;
			in = 1;
		}else{
			in = 0;
		}
	}
	for (int i = x.Integer.size() - 1; i >= 0; i--) {
		x.Integer[i] = x.Integer[i] + y.Integer[i] + in;
		if (x.Integer[i] >= 10) {
			x.Integer[i] -= 10;
			in = 1;
		}else {
			in = 0;
		}
	}
	if (in == 1) {
		x.Integer.insert(x.Integer.begin(), 1);
	}
	return x;
}

int main() { 
	int pos;
	string str1, str2;
	Float x, y;
	while (cin >> str1 >> str2) {
		pos = str1.find(".");
		for (int i = 0; i < pos; i++) {
			x.Integer.push_back(str1[i] - '0');
		}
		for (int i = 0; i + pos + 1 < str1.size(); i++) {
			x.Decimal.push_back(str1[i + pos + 1] - '0');
		}
		pos = str2.find(".");
		for (int i = 0; i < pos; i++) {
			y.Integer.push_back(str2[i] - '0');
		}
		for (int i = 0; i + pos + 1 < str2.size(); i++) {
			y.Decimal.push_back(str2[i + pos + 1] - '0');
		}
		Print(Add(x, y));
	}
	return 0;
}
全部评论

相关推荐

10-28 14:42
门头沟学院 Java
watermelon1124:因为嵌入式炸了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务