题解 | #浮点数加法#

浮点数加法

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

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int findpot(string str){
	int i=0;
	for (; i < str.size(); i++){
		if (str[i] == '.'){
			return i;
		}
	}
	return 0;
}
int main(){
	string str1, str2;
	while (cin>>str1>>str2){
		int s1 = findpot(str1);
		int s2 = findpot(str2);
		string part1, part2, part3, part4;
		part1 = str1.substr(0, s1);
		part2 = str1.substr(s1+1, str1.size()); 
		part3 = str2.substr(0, s2); 
		part4 = str2.substr(s2+1, str2.size());
		if (s1 > s2){
			for (int o = 0; o < s1-s2; o++){
				part3.insert(0, "0");
			}
		}
		if (s1 < s2){
			for (int o = 0; o < s2-s1; o++){
				part1.insert(0, "0");
			}
		}
		if (part2.size() > part4.size()){
			int aw = part2.size(), wa = part4.size();
			for (int o = 0; o < aw-wa; o++){
				part4.insert(part4.size(), "0");
			}
		}
		if (part2.size() < part4.size()){
			int aw = part2.size(), wa = part4.size();
			for (int o = 0; o < wa-aw; o++){
				part2.insert(part2.size(), "0");
			}
		}
		int k=0,m=0;
		for (int i = part2.size() - 1; i >= 0; i--){
			m = part2[i] - '0' + part4[i] - '0'+k;
			k = m / 10;
			part2[i] = (m % 10 + '0');
		}
		for (int i = part1.size() - 1; i >= 0; i--){
			m = part1[i] - '0' + part3[i] - '0' + k;
			k = m / 10;
			part1[i] = (m % 10 + '0');
		}
		char a[100]; 
		if (k == 1){
			a[0] = '1';
			int i = 1;
			for (; i <= part1.size(); i++){
				a[i] = part1[i - 1];
			}
			a[i] = '.';
			for (int j = 0; j < part2.size(); j++){
				a[i + j + 1] = part2[j];
			}
			for (int k = 0; k < part1.size() + part2.size() + 2; k++){
				printf("%c", a[k]);
			}
		}
		else{
			int i = 0;
			for (; i < part1.size(); i++){
				a[i] = part1[i];
			}
			a[i] = '.';
			for (int j = 0; j < part2.size(); j++){
				a[i + j + 1] = part2[j];
			}
			for (int k = 0; k < part1.size() + part2.size()+1; k++){
				printf("%c", a[k]);
			}
		}
		printf("\n");
	}
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务