根据提示,在右侧编辑器补充代码,定义函数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 09:05:37 浏览: 71
```c
void add_float(char* a, char* b, char* res){
int la = strlen(a), lb = strlen(b);
int i, j, k, l, m, n;
char s[la+lb], s1[la+lb], s2[la+lb];
memset(s, 0, sizeof(s));
memset(s1, 0, sizeof(s1));
memset(s2, 0, sizeof(s2));
for(i = la-1, j = 0; i >= 0; i--) if(a[i] != '.') s[j++] = a[i];
for(i = lb-1, j = 0; i >= 0; i--) if(b[i] != '.') s1[j++] = b[i];
l = strlen(s), m = strlen(s1);
n = l > m ? l : m;
for(i = 0; i < n; i++) {
if(i < l) s2[i] += s[i] - '0';
if(i < m) s2[i] += s1[i] - '0';
if(s2[i] >= 10) s2[i+1] += s2[i] / 10, s2[i] %= 10;
}
if(s2[n] > 0) n++;
j = 0;
for(i = n-1; i >= 0; i--) {
if(j == 1) res[j++] = '.';
res[j++] = s2[i] + '0';
}
if(res[0] == '.') {
j = n + 1;
while(j >= 0) res[j] = res[j-1], j--;
res[0] = '0', res[1] = '.';
}
if(res[strlen(res)-1] == '.') res[strlen(res)-1] = '\0';
}
```
阅读全文