题解 | #浮点数加法#
浮点数加法
https://www.nowcoder.com/practice/ddec753f446e4ba4944e35378ba635c8
//这道题比较麻烦但不难,如果掌握大数的加法乘法,那这道题就是代码多点
#include "stdio.h"
#include "string"
#include "algorithm"
using namespace std;
string addString1(string num1,string num2,int &carry){//小数加法
int length = num1.size()>num2.size()?num1.size():num2.size();
while (num1.size() < length)//将二者的位数补齐(低位补齐)
num1 += "0";
while (num2.size() < length)
num2 += "0";
string num3 = "";int temp;
for (int i = length-1; i >= 0; --i) {
temp = num1[i]-'0' + num2[i]-'0'+carry;
if(temp > 9){
carry = 1;
num3 += temp - 10 + '0';
} else{
num3 += temp + '0';
carry = 0;
}
}
int i = 0;
while (num3[i] == '0'){//消除低位的0
++i;
}
num3.erase(0,i);//低位多出来的0舍去
reverse(num3.begin(),num3.end());//算的时候是按反着存的,所以倒回来
return num3;
}
string addString2(string num1,string num2,int &carry){//整数加法
int length = num1.size()>num2.size()?num1.size():num2.size();
while (num1.size() < length)//高位补齐
num1 = "0" + num1;
while (num2.size() < length)
num2 = "0" + num2;
string num3 = "";int temp;
for (int i = length-1; i >= 0; --i) {
temp = num1[i]-'0' + num2[i]-'0' + carry;
if (temp > 9){
carry = 1;
num3 += temp-10+'0';
} else{
num3 += temp+'0';
carry = 0;
}
}
if (carry == 1)
num3 += carry+'0';//最高位>9后要产生更高的一位
reverse(num3.begin(),num3.end());//算的时候是按反着存的,所以倒回来
return num3;
}
int main(){
char buf1[1000],buf2[1000];
while (fgets(buf1,1000,stdin)!=NULL){
fgets(buf2,1000,stdin);
string num1_entire = buf1,num2_ebtire = buf2;
num1_entire.pop_back();num2_ebtire.pop_back();
int pos1 = num1_entire.find('.');//记录第一个数的小数点位置
int pos2 = num2_ebtire.find('.');//记录第二个数的小数点位置
string num1_part1 = num1_entire.substr(0,pos1);//得到第一个数的小数点前面的部分
string num1_part2 = num1_entire.substr(pos1+1);//得到第一个数的小数点后面的部分
string num2_part1 = num2_ebtire.substr(0,pos2);//得到第二个数的小数点前面的部分
string num2_part2 = num2_ebtire.substr(pos2+1);//得到第二个数的小数点后面的部分
/*
* 之后的思路是是先将小数点后面的字符串相加,再将小数点前面的字符串相加
*/
int carry = 0;//存储进位信息
string num3_part2 = addString1(num1_part2,num2_part2,carry);
string num3_part1 = addString2(num1_part1,num2_part1,carry);
string num3_entire = num3_part1+'.'+num3_part2;
printf("%s\n",num3_entire.c_str());
}
}
查看2道真题和解析
360集团公司氛围 352人发布