四舍五入一位小数
每次刷算法题遇到两数相除要四舍五入一位小数取整的时候,就按照自己的思想:
令tmp1等于两数相除整数部分再加0.5;
令tmp2等于两数相除精确的值;
如果tmp2>=tmp1;则需要进位,否则不需要;
祭出了我陈年老代码:
#include<stdio.h>
int main()
{
int a, b, ans;
scanf("%d%d", &a, &b);
double tmp1, tmp2;
tmp1 = a/b+0.5;
tmp2 = a*1.0/b;
if(tmp2>=tmp1)
ans = a/b+1;
else
ans = a/b;
printf("%d\n", ans);
return 0;
}
可是越看越恶心,应该还有思路其他思路吧,于是就想:令double类型的ans等于两数相除精确值再加0.5;然后在把ans强制类型转换为int型,这样也实现了四舍五入,代码如下:
关键代码: ans = a*1.0/b + 0.5;
#include<stdio.h>
int main()
{
int a, b;
double ans;
scanf("%d%d", &a, &b);
ans = a*1.0/b + 0.5;
printf("%d\n", (int)ans);
return 0;
}
今天又特意百度了一下,看有没有更好的方法,发现果然有,其处理方式如下:
a:被除数;
b:除数;
res:a/b的四舍五入结果;
关键代码:res = (a + (b/2))/b;
#include<stdio.h>
int main()
{
int a, b, res;
scanf("%d%d", &a, &b);
res = (a + (b/2))/b;
printf("%d\n", res);
return 0;
}
进一法 :有小数的都变成比这个小数大的最小整数
a:被除数;
b:除数;
res:a/b的进一结果
关键代码:res = (a + (b-1))/b;
#include<stdio.h>
int main()
{
int a, b, res;
scanf("%d%d", &a, &b);
res = (a + (b-1))/b;
printf("%d\n", res);
return 0;
}