这道简单的题我看了好久,做出来不知道哪里错了,求好心人
四舍五入Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MB
Total Submission: 741 Submission Accepted: 82
Description
四舍五入是程序设计中很头疼的精度误差问题。
现在有一种新的四舍五入规定。
对于一个实数的取整,分为以下几种情况:
1、整数部分的最后一位不是9,小数部分小于0.5,那么取整之后保留整数部分不作处理
2、整数部分的最后一位不是9,小数部分不小于0.5,那么取整之后,整数部分需要加1。
3、整数部分的最后一位是9,那么进位将会是一位很麻烦的事情,所以规定保留整数部分不处理。
给出一个实数,输出取整之后的情况。
Input
一个整数 T,表示有 T 组测试数据。(1<=T<=100)
每组数据输入格式如下:
给出一个非负实数,也可能是个整数,数的长度<=1000。
Output
对于每组数据,输出取整之后的结果,不要输出前导0.
如不要输出000034,应该输出34
Sample Input
Original Transformed
3[EOL]
1.234[EOL]
1.823[EOL]
9.643[EOL]
[EOF]
Sample Output
Original Transformed
1[EOL]
2[EOL]
9[EOL]
[EOF]
#include<stdio.h>
#include<string.h>
int main()
{
int t,i,j,count1,count2,num1,num2;
char m[1001];
scanf("%d",&t);
for(j=0;j<t;j++)
{
scanf("%s",m);
num1=0,num2=0;
for(i=0;m[i]!='\0';i++)
{
if(m[i]=='.')
{
count1=i;
num1++;
break;
}
}
for(i=0;m[i]!='\0';i++)
{
if(m[i]!='0')
{
count2=i;
num2++;
break;
}
}
if(num1==0)
{
if(num2==0)printf("0\n");
else
{
count1=strlen(m);
for(i=count2;i<count1;i++)
{
printf("%c",m[i]);
}
printf("\n");
}
}
else
{
if(m[count1-1]=='9')
{
for(i=count2;i<count1;i++)
printf("%c",m[i]);
printf("\n");
}
else
{
if(m[count1+1]<'5')
{
if(m[count1-1]=='0')printf("0\n");
else
{
for(i=count2;i<count1;i++)
printf("%c",m[i]);
printf("\n");
}
}
else
{
for(i=count2;i<count1-1;i++)
printf("%c",m[i]);
printf("%c\n",m[count1-1]+1);
}
}
}
}
return 0;
}