1. 程式人生 > >杭電 英文 a+b 問題

杭電 英文 a+b 問題

A + B

Problem Description讀入兩個小於100的正整數A和B,計算A+B.
需要注意的是:A和B的每一位數字由對應的英文單詞給出.

Input測試輸入包含若干測試用例,每個測試用例佔一行,格式為"A + B =",相鄰兩字串有一個空格間隔.當A和B同時為0時輸入結束,相應的結果不要輸出.

Output對每個測試用例輸出1行,即A+B的值.

Sample Inputone + two =three four + five six =zero seven + eight nine =zero + zero =Sample Output39096

這個題 其實思路挺簡單的,但是中間細節總是出錯。花了好久才寫出來,看到這道題的正確率心裡哇涼哇涼。整體思路是直接把輸入內容看成一個整體,然後在進行的分割,分割的重點在於它們每個單詞和單詞之間 或者單詞 和運算子之間都有空格。所以利用這一點,我們用scanf來儲存字串;因為scanf儲存字串時以空格為結束 不接收空格;這樣100以內的求和 最多接收 6個字串;程式碼如下;

#include <stdio.h>
#include<string.h>
int main()
{   char a[][10]={"zero","one","two","three","four","five","six","seven","eight","nine"};//用0~9的英文單詞 直接給字串陣列賦值;
    int b[10]={0,1,2,3,4,5,6,7,8,9},p[5];//對應的,再將0~9數字給b陣列,順序要一樣,因為他們的下標在下面會用到。p用來記錄每個字串翻譯過來的數字;
    int i=0,j,k=0;
    char c[6][7];//用6個字串陣列接收6個字串;
for(
k=0;;k++) {for(i=0;i<5;i++)//給p賦以-1得值,賦值只要不影響結果就可以; p[i]=-1; for(i=0;i<6;i++) {scanf("%s",c[i]); if(strcmp(c[i],"+")==0)//沒接收一組字串先與“+”比較值為0則跳過進入下一個字串的接收,主要用來區分+號前面的數和+號後面的數; continue; if(strcmp(c[i],"=")==0)//以“=”號為終止; break; for(j=0;j<10;j++) { if
(
strcmp(c[i],a[j])==0) {p[i]=b[j];break; } } }if(p[0]==0&&p[2]==0&&p[3]==-1)break;//確認終止迴圈的條件,和避免輸入(__ __ + zero 非零數 = )跳出迴圈 if(p[1]==-1) {if(p[3]==-1)printf("%d\n",p[0]+p[2]); else printf("%d\n",p[0]+p[2]*10+p[3]); } if(p[1]!=-1) {if(p[4]==-1)printf("%d\n",p[0]*10+p[1]+p[3]); else printf("%d\n",p[0]*10+p[1]+p[3]*10+p[4]); } }return 0; }