定义函数add_float(char* a, char* b, char* res)实现两个正浮点数a, b的精确加法。 注意:只需要实现函数add_float,函数中没有任何输入输出。 函数的输入参数char* a和char* b都是用字符串表示的正浮点数。保证a, b一定都包含一个字符是小数点'.',保证其余字符全是0-9的数字。保证a, b不超过128个字符。 函数的输出参数char* res,保证浮点数a+b的结果不超过 128 个字符。 要求res字符串必须包含小数点'.'(即使结果是像下面 sample 1 这样并没有小数部分)。 要求res字符串没有任何多余的前缀字符'0'和后缀字符'0'(即使结果像下面 sample 2 这样没有整数部分)。 注意:虽然要求结果字符串res必须有小数点且没有任何前缀后缀0,但是并不保证字符串a, b满足这两点。 平台会对你编写的代码进行测试: 测试输入:0.1 0.9 预期输出: 1. 注意:不是1.0 测试输入:.01 .09 预期输出: .1 注意:不是0.1,也不是0.10
时间: 2023-06-12 10:05:26 浏览: 124
float_2_char.zip_C51 float转char_单片机 浮点数_浮点数 char_浮点数 转换_浮点数转换
5星 · 资源好评率100%
以下是C++代码实现:
```c++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void add_float(char* a, char* b, char* res) {
int lena = strlen(a), lenb = strlen(b);
reverse(a, a + lena);
reverse(b, b + lenb);
int len = max(lena, lenb);
int carry = 0;
for (int i = 0; i < len; i++) {
int x = i < lena ? a[i] - '0' : 0;
int y = i < lenb ? b[i] - '0' : 0;
int sum = x + y + carry;
res[i] = (sum % 10) + '0';
carry = sum / 10;
}
if (carry) {
res[len++] = carry + '0';
}
res[len] = '\0';
reverse(res, res + len);
int dot = -1;
for (int i = 0; i < len; i++) {
if (res[i] == '.') {
dot = i;
break;
}
}
if (dot == -1) {
res[len] = '.';
res[len + 1] = '0';
res[len + 2] = '\0';
} else {
int cnt = 0;
for (int i = len - 1; i > dot; i--) {
if (res[i] == '0') {
cnt++;
} else {
break;
}
}
if (cnt) {
len -= cnt;
res[len] = '\0';
}
if (res[len - 1] == '.') {
res[len] = '0';
res[len + 1] = '\0';
}
}
}
int main() {
char a[129], b[129], res[129];
cin >> a >> b;
add_float(a, b, res);
cout << res << endl;
return 0;
}
```
我们首先将字符串a和b分别反转,这样方便从低位到高位进行计算。然后按照加法的规则,从低位到高位逐位相加,并且记录进位。最后将结果字符串反转回来,找到小数点的位置,进行特殊处理即可。
需要注意的是,有些情况下,我们需要在结果字符串的末尾添加小数点和0,或者删除整数部分或小数部分的多余的0。这些情况都需要特判,并且要注意边界条件。
阅读全文