目录
读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出.
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔.当A和B同时为0时输入结束,相应的结果不要输出.
对每个测试用例输出1行,即A+B的值.
输入:
one + two = three four + five six = zero seven + eight nine = zero + zero =输出:
3 90 96
AC代码~
#include<stdio.h>
#include<string.h>
int cmp(char* s1, char* s2, int len) { // 判断两串是否相等
for (int i = 0; i < len; i++)
if (s1[i] != s2[i])
return 0;
return 1;
}
int main() {
char s[100];
char num[10][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
while (gets(s)) {
int num1 = 0; // num1和num2存储最终相加的两个数
int num2 = 0;
int i = 0;
int k = 0;
int a = 0;
char tmp[10]; // 第一个数第一位
char tmp2[10];// 第一个数第二位
while (s[i] != '+') {
if ('a' <= s[i] && s[i] <= 'z' && k == 0) {
tmp[i] = s[i];
i++;
} else if ('a' <= s[i] && s[i] <= 'z' && k == 1) {
tmp2[a] = s[i];
a++;
i++;
} else { // s[i] == ' '
if (k == 0) {
for (int j = 0; j < 10; j++) {
if (cmp(tmp, num[j], strlen(num[j]))) {
num1 = num1 * 10 + j;
k = 1;
break;
}
}
} else {
for (int j = 0; j < 10; j++) {
if (cmp(tmp2, num[j], strlen(num[j]))) {
num1 = num1 * 10 + j;
break;
}
}
}
i++;
}
}
i = i + 2;
char tmp3[10]; // 第二个数第一位
char tmp4[10]; // 第二个数第二位
k = 0;
int j = 0;
a = 0;
while (s[i] != '=') {
if ('a' <= s[i] && s[i] <= 'z' && k == 0) {
tmp3[j] = s[i];
j++;
} else if ('a' <= s[i] && s[i] <= 'z' && k == 1) {
tmp4[a] = s[i];
a++;
} else { // s[i] == ' '
if (k == 0) {
for (int p = 0; p < 10; p++) {
if (cmp(tmp3, num[p], strlen(num[p]))) {
num2 = num2 * 10 + p;
k = 1;
break;
}
}
} else {
for (int p = 0; p < 10; p++) {
if (cmp(tmp4, num[p], strlen(num[p]))) {
num2 = num2 * 10 + p;
break;
}
}
}
}
i++;
}
if (num1 == 0 && num2 == 0)
break;
printf("%d\n", num1 + num2);
}
}