atof()函数详解----NOI2.2基本算法之递归和自调用函数 逆波兰表达式 分析
2016-08-15 22:28
417 查看
一、题目描述
总时间限制: 1000ms 内存限制: 65536kB
描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
输入输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
输出输出为一行,表达式的值。
可直接用printf("%f\n", v)输出表达式的值v。
样例输入
样例输出
提示可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在math.h中。
二、题目分析
此题为递归题目,可以通过函数解决,每一次递归都可以进行输入,
double f(){
scanf("%s",a);
}
scanf("%s",a)遇到空格就停止输入,因此可以用if语句来判断是 运算符 还是 浮点数。
char a[55];
double f(){
scanf("%s",a);
if(a[0]==‘+’) ...
if(a[0]==‘-’) ...
if(a[0]==‘*’) ...
if(a[0]==‘/’) ...
else ...
}
前4个if都很好处理
if(a[0]==‘+’) return f()+f();
if(a[0]==‘-’) return f()-f();
if(a[0]==‘*’) return f()*f();
if(a[0]==‘/’) return f()/f();
最后的else就是浮点数的情况,atof()函数就大显身手了。
else return atof(a);
atof()函数简化了许多步骤,在必要的时候可以使用atof来简化程序。
代码:
总时间限制: 1000ms 内存限制: 65536kB
描述逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
输入输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
输出输出为一行,表达式的值。
可直接用printf("%f\n", v)输出表达式的值v。
样例输入
* + 11.0 12.0 + 24.0 35.0
样例输出
1357.000000
提示可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在math.h中。
二、题目分析
此题为递归题目,可以通过函数解决,每一次递归都可以进行输入,
double f(){
scanf("%s",a);
}
scanf("%s",a)遇到空格就停止输入,因此可以用if语句来判断是 运算符 还是 浮点数。
char a[55];
double f(){
scanf("%s",a);
if(a[0]==‘+’) ...
if(a[0]==‘-’) ...
if(a[0]==‘*’) ...
if(a[0]==‘/’) ...
else ...
}
前4个if都很好处理
if(a[0]==‘+’) return f()+f();
if(a[0]==‘-’) return f()-f();
if(a[0]==‘*’) return f()*f();
if(a[0]==‘/’) return f()/f();
最后的else就是浮点数的情况,atof()函数就大显身手了。
else return atof(a);
atof()函数简化了许多步骤,在必要的时候可以使用atof来简化程序。
代码:
#include<cstdio> #include<cstdlib> #include<cmath> char a[105]; double v(){ scanf("%s",a); if(a[0]=='\0') return 0; else if(a[0]=='+') return v()+v(); else if(a[0]=='-') return v()-v(); else if(a[0]=='*') return v()*v(); else if(a[0]=='/') return v()/v(); else return atof(a); } int main() { printf("%f",v()); }
相关文章推荐
- 【转载】2.2基本算法之递归和自调用函数 逆波兰表达式分析—心机深
- [OpenJudge] 2.2基本算法之递归和自调用函数 逆波兰表达式(前缀表达)
- NOI2.2基本算法之递归和自调用函数 全排列 分析----如何写全排列函数
- 逆波兰表达式(基本算法之递归和自调用函数)
- 【转载】2.2基本算法之递归和自调用函数 全排列分析—用next_permutation函数,全搞定
- NOI(2.2基本算法之递归和自调用函数之1755:菲波那契数列)
- 3089:爬楼梯(2.2基本算法之递归和自调用函数)
- NOI2.2基本算法之递归和自调用函数 2的幂次方表示 分析
- 2705:扩号匹配问题(2.2基本算法之递归和自调用函数)
- [OpenJudge] 2.2基本算法之递归和自调用函数 Pell数列
- 7592:求最大公约数问题(2.2基本算法之递归和自调用函数)
- 6261:汉诺塔问题(2.2基本算法之递归和自调用函数)
- 8758:2的幂次方表示(2.2基本算法之递归和自调用函数)
- [OpenJudge] 2.2基本算法之递归和自调用函数 全排列
- 使用递归下降算法分析数学表达式 -- 基于堆栈的计算器实现算法
- 逆波兰表达式算法分析。
- Hanoi Tower汉诺塔问题函数递归算法分析及相应python代码
- NOI2.4基本算法之分治 统计数字 分析----换一种思路
- shell脚本之正则表达式、函数、grep、sed、awk、printf等基本命令配置详解
- 递归--练习10--noi1696逆波兰表达式