根据提示,在右侧编辑器补充代码,定义函数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 18:05:42 浏览: 131
```c
void add_float(char* a, char* b, char* res) {
int a_len = strlen(a);
int b_len = strlen(b);
int a_decimal = 0, b_decimal = 0;
int res_int = 0, res_decimal = 0;
int carry = 0;
for (int i = 0; i < a_len; i++) {
if (a[i] == '.') {
a_decimal = a_len - 1 - i;
} else {
res_int = res_int * 10 + (a[i] - '0');
}
}
for (int i = 0; i < b_len; i++) {
if (b[i] == '.') {
b_decimal = b_len - 1 - i;
} else {
res_int = res_int + (b[i] - '0');
}
}
res_decimal = a_decimal > b_decimal ? a_decimal : b_decimal;
if (res_int == 0) {
res[0] = '0';
res[1] = '.';
res[2] = '0';
res[3] = '\0';
return;
}
int i = 0;
while (res_int > 0) {
if (i == res_decimal) {
res[i] = '.';
i++;
}
carry = res_int % 10;
res_int = res_int / 10;
res[i] = carry + '0';
i++;
}
res[i] = '\0';
i--;
while (res[i] == '0') {
res[i] = '\0';
i--;
}
if (res[i] == '.') {
res[i] = '\0';
}
char temp;
int len = strlen(res);
for (int i = 0; i < len / 2; i++) {
temp = res[i];
res[i] = res[len - 1 - i];
res[len - 1 - i] = temp;
}
}
```
阅读全文