输入两个小数,要求只不能使用除操作字符串以外的函数,结果的小数部分不包含无用的0,如果小数点后全是零,只输出整数部分
例如:输入125.39 263.71
输出:389.1
#include<iostream>
#include<string>
using namespace std;
//计算小数部分
int calculate(string x1,string x2,string& xresult ,int x, int flag){
// x = 1,计算小数
//x=0,计算整数
int l1 = x1.size();
int l2 = x2.size();
if(l1>l2){
if(x) {
x2.insert(x2.end()-1,l1-l2,'0');
}else{
x2.insert(x2.begin(),l1-l2,'0');
}
}else if(l1<l2){
if(x){
x1.insert(x1.end()-1,l2-l1,'0');
}else{
x1.insert(x1.begin(),l2-l1,'0');
}
l1 = l2;
}
int sum = 0;
for(int i=l1-1;i>=0;i--){
sum = (x1[i]-'0')+(x2[i]-'0')+flag;
if(sum >=10){
flag = 1;
sum%=10;
}else{
flag = 0;
}
xresult = to_string(sum) + xresult;
}
return flag;
}
int main() {
string s1;string s2;
cin>>s1>>s2;
int pos = s1.find(".");
string z1 = s1.substr(0,pos);
string x1 = s1.substr(pos+1);
pos = s2.find(".");
string z2 = s2.substr(0,pos);
string x2 = s2.substr(pos+1);
string xresult="";
int flag=0;
flag = calculate(x1,x2,xresult,1,flag);
xresult = "."+xresult;
flag = calculate(z1,z2,xresult,0,flag);
if(flag){
xresult = "1"+xresult;
}
int flag1 = 1;
int size = xresult.size();
pos = xresult.find(".");
int index=size-1;
for(int i=size-1; i>=pos+1;i--){
if(xresult[i]!='0'){
flag1 = 0;
index = i+1;
break;
}
}
if(!flag1)cout<<xresult.substr(0,index);
else cout<<xresult.substr(0,pos);
return 0;
}