链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
牛牛:“你低我 4.86 厘米,四舍五入后就是 4.9 厘米,再四舍五入后就是 5 厘米,再四舍五入后就是 10 厘米!”
我们知道,牛牛很在意自己的身高,所以他想请你帮忙求一下他的身高四舍五入后的最大值是多少,为了简化问题,我们认为牛牛的身高是一个正整数。
“四舍五入”:这里的意思是可以以任何顺序在任意位进行任意次四舍五入,比如有:14861 -> 14900 -> 15000 -> 20000 。
输入描述:
第一行一个整数 T代表案例组数。
接下来 T 行每行一个整数 n代表牛牛的身高(适当放大后)。
保证:
1≤T≤10^3; 1≤n≤10^6;
输出描述
输出共 T 行,每行一个正整数代表牛牛四舍五入最大化自己的身高后的结果。
示例1
输入
5 1 2038 99999 13453 32921
输出
1 2040 100000 14000 33000
说明
对于 13453 这个数据,变化是这样的:
13453 --> 13500
13500 --> 14000
解题思路
由于需要根据整数的各位数字判断是否进行四舍五入,所以可以把数拆开放在数组中,通过遍历数组中的各个位数来进行四舍五入的操作。求解的是身高的最大值,故不需要“四舍”,只需要“五入”,五入后的低位需要全部变为零。特别地,当最高位大于等于5时需要进一位,其余各位为零。
(本题也可直接利用字符数组进行存储,更加便利)
代码
#include<stdio.h>
int main()
{
int T,n,a[10],i,j,k,l;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
i=1;
l=0;
while(n)
{
a[i++]=n%10;
n/=10;
l++;
}
a[l+1]=0;
if(a[l]>=5)
{
a[l+1]=1;
for(j=l; j>=1; j--)
a[j]=0;
}
else
{
for(j=1; j<=l; j++)
{
if(a[j]>=5)
{
a[j+1]++;
for(k=1; k<=j; k++)
a[k]=0;
}
}
}
n=0;
for(j=l+1; j>=1; j--)
{
n=n*10+a[j];
}
printf("%d\n",n);
}
return 0;
}