A + B
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Problem Description
讀入兩個小於100的正整數A和B,計算A+B.
需要注意的是:A和B的每一位數字由對應的英文單詞給出.
Input
測試輸入包含若干測試用例,每個測試用例占一行,格式為"A + B =",相鄰兩字符串有一個空格間隔.當A和B同時為0時輸入結束,相應的結果不要輸出.
Output
對每個測試用例輸出1行,即A+B的值.
Sample Input
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
Sample Output
3
90
96
解題思路:把要處理的等式當做一個字符串,然後用一個s1字符數組記錄出現的小寫字母,當遇到空格時代表一個單詞結束,然後用這個單詞和每個數字的單詞進行比較,找出這個單詞代表的數字是多少,記錄下數字後將s1中的元素清除,再次從s1[0]開始保存單詞,直到字符串結束,找出 + 前後兩部分各代表的整數。
AC代碼:
#include<stdio.h> #include<string.h> int main() { char str[30],s1[20]; int i,j,len,s,sum1,sum2,flag; while(gets(str)!=NULL) { len=strlen(str); sum1=sum2=0; flag=0; for(i=0,j=0;i<len;i++) { if(str[i]>='a'&&str[i]<='z') /*如果是小寫字母*/ s1[j++]=str[i]; /*保存在s1中*/ else if(str[i]==' '&&str[i-1]!='+') /*判斷str[i-1]!='+'是為了避免將 + 當做一個字符串處理*/ { s1[j]='\0'; /*千萬不能忘記字符串結束標志*/ if(!strcmp(s1,"zero")) s=0; else if(!strcmp(s1,"one")) s=1; else if(!strcmp(s1,"two")) s=2; else if(!strcmp(s1,"three")) s=3; else if(!strcmp(s1,"four")) s=4; else if(!strcmp(s1,"five")) s=5; else if(!strcmp(s1,"six")) s=6; else if(!strcmp(s1,"seven")) s=7; else if(!strcmp(s1,"eight")) s=8; else if(!strcmp(s1,"nine")) s=9; /*比較字符串,找出代表的數字*/ j=0; /*記得從零開始*/ if(!flag) sum1=sum1*10+s; /*sum1保存 + 前面部分代表的數字*/ else sum2=sum2*10+s; /*sum2保存 + 後面部分代表的數字*/ } else if(str[i]=='+') flag=1; /*標記 + 已出現*/ } if(sum1==0&&sum2==0) /*兩個數都是0時結束程序*/ break; else printf("%d\n",sum1+sum2); } return 0; }