读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出。 具体的输入输出格式规定如下: 输入格式:测试输入包含若干测试用例,每个测试用例占一行,格式为 "A + B = ",相邻两字符串有一个空格间隔。当A和B同时为zero时输入结束,相应的结果不要输出。 输出格式:对每个测试用例输出1行,即A+B的值。 输入样例: one + two = three four + five six = zero seven + eight nine = zero + zero = 输出样例: three nine zero nine six c程序编程
时间: 2024-03-11 08:48:48 浏览: 46
以下是 C 语言代码实现:
```c
#include <stdio.h>
#include <string.h>
char *digit_dict[] = {
"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine"
};
int get_digit(char *word) {
for (int i = 0; i <= 9; i++) {
if (strcmp(word, digit_dict[i]) == 0) {
return i;
}
}
return -1;
}
int main() {
char line[100];
while (fgets(line, 100, stdin)) {
if (strstr(line, "zero + zero")) {
break;
}
char *a = strtok(line, " + =\n");
char *b = strtok(NULL, " + =\n");
char *c = strtok(NULL, " + =\n");
int len_a = strlen(a), len_b = strlen(b);
int num_a = 0, num_b = 0;
for (int i = 0; i < len_a; i += 5) {
char word[6] = "";
strncpy(word, a + i, 5);
num_a = num_a * 10 + get_digit(word);
}
for (int i = 0; i < len_b; i += 5) {
char word[6] = "";
strncpy(word, b + i, 5);
num_b = num_b * 10 + get_digit(word);
}
int res = num_a + num_b;
if (res == 0) {
printf("zero\n");
} else {
int digits[10], cnt = 0;
while (res > 0) {
digits[cnt++] = res % 10;
res /= 10;
}
for (int i = cnt - 1; i > 0; i--) {
printf("%s ", digit_dict[digits[i]]);
}
printf("%s\n", digit_dict[digits[0]]);
}
}
return 0;
}
```
代码思路:
1. 定义 digit_dict 数组,将英文单词与对应数字的映射关系存储起来。
2. 通过 while 循环不断读入测试用例,直到读入 "zero + zero" 为止。
3. 对于每个测试用例,从输入字符串中提取出 A 和 B 的值,将英文单词转换为数字,计算 A + B 的值。
4. 将计算结果转换为英文单词,输出。
阅读全文