读书人

C++大神们ACM标题

发布时间: 2013-03-21 10:08:17 作者: rapoo

C++大神们ACM题目
Description

四舍五入是程序设计中很头疼的精度误差问题。
现在有一种新的四舍五入规定。
对于一个实数的取整,分为以下几种情况:
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<iostream>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
int main()
{
char a[1000],b[1000],d[1000];
int t,i,j,k,c,f,g,p;
cin>>t;
for(i=0;i<t;i++)
{
cin>>a;
f=0;
for(j=0;j<strlen(a);j++)
{
if(a[j]=='.')
{
k=j;
f++;
break;
}


}
if(f!=0)
{

string str(a);
strcpy(b,str.substr (0,k).c_str ());

strcpy(d,str.substr (k+1).c_str ());


g=strlen(b);
c=b[g-1];

if(c=='9'||d[0]<'5')
{
for(p=0;p<=g;p++)
{
if(b[p]!='0')
break;
}
for(;p<=g;p++)
cout<<b[p];
cout<<endl;
}

else
{
b[g-1]=b[g-1]+1;
b[g]='\0';
for(p=0;p<=g;p++)
{
if(b[p]!='0')
break;
}
for(;p<=g;p++)
cout<<b[p];
cout<<endl;
}
}
else
{
for(p=0;p<=strlen(a);p++)
{
if(a[p]!='0')
break;
}
for(;p<=strlen(a);p++)
cout<<a[p];
cout<<endl;
}
}
return 0;
}
c++
[解决办法]
-11.7
0.0

读书人网 >C++

热点推荐