PAT(乙級)2020年秋季考試 7-3 如需挪車請致電 (20分)
阿新 • • 發佈:2020-11-30
7-3如需挪車請致電(20分)
上圖轉自新浪微博。車主用一系列簡單計算給出了自己的電話號碼,即:
2、3、√9=3、√9=3、0、叄=、5、9、1、23=8、8,最後得到的電話號碼就是 153 3033 3384。
本題就請你寫個程式自動完成電話號碼的轉換,以幫助那些不會計算的人。
輸入格式:
輸入用 11 行依次給出 11 位數字的計算公式,每個公式佔一行。這裡僅考慮以下幾種運算:加(+
)、減(-
)、乘(*
)、除(/
)、取餘(%
,注意這不是上圖中的百分比)、開平方根號(sqrt
)、指數(^
)和文字(即 0 到 9 的全小寫漢語拼音,如ling
表示 0)。運算子與運算數之間無空格,運算數保證是不超過 1000 的非負整數。題目保證每個計算至多隻有 1 個運算子,結果都是 1 位整數。
輸出格式:
在一行中給出電話號碼,數字間不要空格。
輸入樣例:
2/2
3+2
sqrt9
sqrt9
6%2
san
5-2
9/3
1*3
2^3
8/2
輸出樣例:
15330333384
程式碼講解:此題要從運算子的個數入手,咱們看,輸入的運算子只有倆目,或者單目(sqrt)
其餘的就是沒有(一定要注意,運算子為0的情況可能只有單獨的數字的情況),那我們當務
之急,就是求有幾個運算元,就可以了,求運算元,就和求一個句子中單詞的數量是一樣的。。
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4int main() 5 { 6 char pin[11][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; 7 int i,j,count,a,b,count_r=0,flag=0; 8 char input[300],c,suiji[30]; 9 char result[200]={0}; 10 for(i=0;i<11;i++) 11 { 12 count=0; 13 flag=0; 14 scanf("%s",input);15 for(j=0;input[j]!='\0';j++) 16 { 17 if(input[j]>='0'&&input[j]<='9') 18 { 19 if(flag==0) 20 { 21 count++; 22 flag=1; 23 } 24 } 25 else 26 { 27 flag=0; 28 } 29 } 30 if(2==count) 31 { 32 sscanf(input,"%d%c%d",&a,&c,&b); 33 switch(c) 34 { 35 case '+': result[count_r++]=a+b+'0';break; 36 case '-': result[count_r++]=a-b+'0';break; 37 case '*': result[count_r++]=a*b+'0';break; 38 case '/': result[count_r++]=a/b+'0';break; 39 case '%': result[count_r++]=a%b+'0';break; 40 case '^': result[count_r++]=(int)(pow(a,b))+'0';break; 41 } 42 } 43 else 44 { 45 if(1==count) 46 { 47 if(input[0]=='s') 48 { 49 sscanf(input,"%4s%d",suiji,&a); 50 result[count_r++]=(int)(sqrt(a))+'0'; 51 } 52 else 53 result[count_r++]=input[0]; 54 55 } 56 else 57 { 58 for(j=0;j<10;j++) 59 { 60 if(strcmp(pin[j],input)==0) 61 { 62 result[count_r++]=j+'0'; 63 break; 64 } 65 66 } 67 } 68 } 69 } 70 printf("%s\n",result); 71 return 0; 72 }