PAT(乙级)2020年秋季考试 7-3 如需挪车请致电 (20分)


7-3 如需挪车请致电 (20分)
 

phone.jpg

上图转自新浪微博。车主用一系列简单计算给出了自己的电话号码,即:

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 } 

 




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM