浮点数加法

题目描述
求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式: P1P2…Pi.Q1Q2…Qj 对于整数部分,P1P2…Pi是一个非负整数 对于小数部分,Qj不等于0

输入描述:
对于每组案例,每组测试数据占2行,分别是两个加数。

输出描述:
每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数

示例1
输入
0.111111111111111111111111111111
0.111111111111111111111111111111
输出
0.222222222222222222222222222222

题目解析:因为输入的浮点数的位数可能超过机器表示的范围,所以将浮点数作为字符串输入。两个不同的浮点数的加法,就是按位相加,所以只用补齐短的浮点数就可以了。整数是前面补0,小数是后面补0 。

代码:

#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>
using namespace std; 

int main()
{
	string number1,number2;
	while(cin >> number1 >> number2){
		//补全数字 
		int len1 = number1.size();
		int len2 = number2.size();
		int findnumber1Int = number1.find(".") + 1;  //整数的位数 
		int findnumber2Int = number2.find(".") + 1;
		
		if(findnumber1Int < findnumber2Int){         //补全整数 
			int len = findnumber2Int - findnumber1Int;
			for(int i = 0 ; i < len ; i++){
				number1.insert(0,1,'0');
			}
		}
		if(findnumber1Int > findnumber2Int){
			int len = findnumber1Int - findnumber2Int;
			for(int i = 0 ; i < len ; i++){
				number2.insert(0,1,'0');
			}
		}
		int findnumber1float = len1 - findnumber1Int;  //小数的位数 
		int findnumber2float = len2 - findnumber2Int;
		
		if(findnumber1float < findnumber2float){      //补全小数 
			int len = findnumber2float - findnumber1float;
			for(int i = 0 ; i < len ; i++){
				number1 += '0';
			}
		}
		if(findnumber1float > findnumber2float){
			int len = findnumber1float - findnumber2float;
			for(int i = 0 ; i < len ; i++){
				number2 += '0';
			}
		}
		//////////////////////////////////// 
		
		string result;
		int k = 0;
		for(int i = number1.size()-1;i >= 0; i--){
			if(number1[i] == '.'){
				result += number1[i];
			}else{
				result += char(((number1[i] - '0') + (number2[i] - '0') + k) % 10 + '0');  //本位 
				int r = ((number1[i] - '0') + (number2[i] - '0') + k) / 10;   //进位 
				k = r;
			}
		}
		for(int i = result.size() - 1;i >= 0; i-- ){
			cout << result[i];
		}
		cout << endl;
	}
    return 0;
}
发布了41 篇原创文章 · 获赞 0 · 访问量 1177

猜你喜欢

转载自blog.csdn.net/Gedulding/article/details/104316752