这道题,这样写为什么不对,求告知,急啊。。。。
四舍五入是程序设计中很头疼的精度误差问题。
现在有一种新的四舍五入规定。
对于一个实数的取整,分为以下几种情况:
1、整数部分的最后一位不是9,小数部分小于0.5,那么取整之后保留整数部分不作处理
2、整数部分的最后一位不是9,小数部分不小于0.5,那么取整之后,整数部分需要加1。
3、整数部分的最后一位是9,那么进位将会是一位很麻烦的事情,所以规定保留整数部分不处理。
给出一个实数,输出取整之后的情况。
Input
一个整数 T,表示有 T 组测试数据。(1<=T<=100)
每组数据输入格式如下:
给出一个实数,也可能是个整数,数的长度<=1000。
Output
对于每组数据,输出取整之后的结果,不要输出前导0.
Sample Input
Original
Transformed
3
1.234
1.823
9.643
Sample Output
Original
Transformed
1
2
9
我的代码
#include<math.h>
using namespace std;
int main()
{
string a,b,c;
int i,j,n,k,p;
cin>>n;
while(n)
{
cin>>a;
b=a.substr(0,a.find('.'));
k=b.length();
c=a.substr(a.find('.')+1,a.length());
p=c.length();
//cout<<b<<endl;
//cout<<c<<endl;
i=atoi(b.c_str());
j=atoi(c.c_str());
if(i%10!=9)
{
if(j/pow(10,k)<5)
cout<<i<<endl;
else
cout<<i+1<<endl;
}
else
{
cout<<i<<endl;
}
n--;
}
return 0;
}
为什么是wrong answer
[解决办法]
看你的程序应该是
if(j/pow(10,k)<5)
---》
if(j/pow(10,p)<0.5)
吧
不过没必要搞的这么复杂吧,除非你是锻炼cstring
采用取整函数floor,不是很快能解决吗