1. 程式人生 > 實用技巧 >PAT(乙級)2020年秋季考試 7-3 如需挪車請致電 (20分)

PAT(乙級)2020年秋季考試 7-3 如需挪車請致電 (20分)

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>
 4
int 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 }