题解 | #浮点数加法#

浮点数加法

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

#include <bits/stdc++.h>
using namespace std;

int flag=0; 

string addString1(string a,string b)//等长字符串加法,小数 
{
	string res;
	int carry=0;
	for(int i=a.length()-1;i>=0;i--)
	{
		int num=a[i]-'0'+b[i]-'0'+carry;
		res+=num%10+'0';
		carry=num/10;
	}
	if(carry==1) flag=1;//两者区别在这,这里表示小数最后进位1的处理 
	reverse(res.begin(),res.end());
	return res;
}

string addString2(string a,string b)//等长字符串加法,整数 
{
	string res;
	int carry=flag; 
	for(int i=a.length()-1;i>=0;i--)
	{
		int num=a[i]-'0'+b[i]-'0'+carry;
		res+=num%10+'0';
		carry=num/10;
	}
	if(carry==1) res+='1';
	reverse(res.begin(),res.end());
	return res;
}

int main(){
	string s1,s2;
	while(cin>>s1>>s2)
	{
		//整数和小数分离,分别计算 
		string x1,x2,y1,y2;
		int pos1=s1.find('.');
		int pos2=s2.find('.');
		x1=s1.substr(0,pos1);
		y1=s1.substr(pos1+1);
		x2=s2.substr(0,pos2);
		y2=s2.substr(pos2+1);
		
		//找出长的,换到x1,y1,明确了x1,y1长 
		if(x1.length()<x2.length()) swap(x1,x2);
		if(y1.length()<y2.length()) swap(y1,y2);
		
		//对短的补长对齐 
		x2.insert(0,x1.length()-x2.length(),'0');
		y2.insert(y2.length(),y1.length()-y2.length(),'0');
		
		y1=addString1(y1,y2);
		x1=addString2(x1,x2);
		//删除小数末尾的'0'
		for(int i=y1.size()-1;i>=0;i--)
		{
			if(y1[i]=='0')	y1.erase(i,1);
			else 			break;
		}
		cout<<x1<<'.'<<y1<<endl; 
	}
	return 0;
}

全部评论

相关推荐

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