大家好,大一学过C,C++现在刚学到输入/输出,遇到一个题目无法解出,感谢各位赐教。
题目:编写程序提示用户输入小数,然后输出该小数四舍五入到小数点后第二位的数字。
要求:用基本的输入输出语句写出算法,不要涉及判断与循环。
大家好,大一学过C,C++现在刚学到输入/输出,遇到一个题目无法解出,感谢各位赐教。
题目:编写程序提示用户输入小数,然后输出该小数四舍五入到小数点后第二位的数字。
要求:用基本的输入输出语句写出算法,不要涉及判断与循环。
感谢 wfpb及大家的关注,经过思考,我也想出了一个算法,可以完全不用判断来实现四舍五入,完整代码如下:
#include <iostream>
using namespace std;
int main()
{
double inputDecimal,tempDecimal;
int minuend,subtranhend,result;
cout<<"Please enter a decimal. ";
cin>>inputDecimal;
cout<<endl;
tempDecimal = inputDecimal*200; //step1
minuend=static_cast<int>(tempDecimal)%10;
tempDecimal = inputDecimal*100;
subtranhend=static_cast<int>(tempDecimal)%10;
result=minuend-subtranhend; //step2
cout<<"Result is "<<result<<endl;
return 0;
}
不过还有一个问题。
上面step1中原来是这样写的:
minuend=static_cast<int>(inputDecimal*200)%10;
subtranhend=static_cast<int>(inputDecimal*100)%10;
这样写的话就不用中间变量tempDecimal,但是计算出的minuend不正确,不知为何,谢谢大家指点迷经。
仔细考虑了下,改正了原来的算法,消除小数点后第二位数是5-9时出错的错误。谢谢大家关注。
#include <iostream>
using namespace std;
int main()
{
double inputDecimal;
int minuend,subtranhend,result;
cout<<"Please enter a decimal. ";
cin>>inputDecimal;
cout<<endl;
minuend=static_cast<int>(inputDecimal*200);
subtranhend=static_cast<int>(inputDecimal*100);
result=(minuend-subtranhend)%10;
cout<<"Result is "<<result<<endl;
return 0;
}
---------VC验证。
[此贴子已经被作者于2006-8-19 16:38:21编辑过]