我发了一个题解,提交时老是说我标识符重复,这是什么原因?
我们生活中常使用到的数学算式如: ( 3+4 )×5−6
这是一种中缀表达式,还有两种我们不常见过的表达式:前缀表达式与后缀表达式。
前缀表达式: −×+ 3 4 5 6
后缀表达式: 3 4+5×6 −
通过观察可以发现:前缀表达式运算符号提前,后缀表达式运算符号靠后,那么思路不就出来了吗?
1.是数字直接输出;
2.是运算符号先输出后两个数字再输出运算符号。
那么,用模拟和递归就能解出来了!注意:递归中如果读到 0 直接用 exit 结束程序,不能用 return 因为还会返回到 main 函数。
//洛谷P9857
#include <stdio.h>
#include <stdlib.h> //exit函数需用库
void hzbds()
{
char a[105]; scanf("%s",a); //输入前缀表达式
if(a[0]=='0') exit(0); //如题意读到0终止,不能用return,直接终止程序
if(a[0]>'0'&&a[0]<='9')
printf("%s ",a); //数字直接输出
else //是运算符号先输出后两位数字再输出运算符号
{
hzbds(); hzbds(); //后两位数字
printf("%c ",a[0]); //运算符号
}
}
int main()
{
while(1) //死循环,结束条件exit(0)在函数中
{
hzbds(); //将前缀表达式转化成后缀表达式
puts(""); //换行
}
return 0; //完美结束好习惯
}
注:本题解为引用题解,参考此处。