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 }