《算法竞赛入门经典》习题2-5 分数化小数(Decimal)
来源:互联网 发布:ubuntu kylin qq 编辑:程序博客网 时间:2024/05/16 03:02
原题
题意:输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。其中a,b ≤ 106, c≤100。输入包含多组数据,结束标记为a=b=c=0。
测试数据:
样例输入:
1 6 4
0 0 0样例输出:
Case 1: 0.1667
解题思路
这道题是整数取整、取余的练习题。
本以为可以直接用C++的setprecision(c)解决,但是测试时发现一旦c大于16以后,输出的浮点数后面全为0,原因是double的有效精度只有16位。
因此必须手动模拟除法的运算,用小学时候的学的不停“乘10取余”法即可解决。先输出小数点前的数字,由于测试样例中最后一位需要四舍五入,因此先输出前c-1位,最后第c位根据c+1位判断是否舍入。
AC代码
#include <iostream>#include <cstdio>using namespace std;int main(int argc, char const *argv[]){ int a,b,c,kase = 0; while (~scanf("%d%d%d", &a, &b, &c)) { if (!a && !b && !c) break; kase++; //先输出小数点前的数字 printf("Case: %d: %d.", kase, a/b); a %= b; //输出小数点后的c-1位 for (int i = 0; i < c-1; ++i) { a *= 10; printf("%d", a/b); a %= b; //跳出时a为c-1位运算后的余数 } //考虑最后一位四舍五入 int more = ((a*10)%b * 10) / b; //观察第c位的后一位 if (more >= 5) printf("%d\n", (a*10)/b + 1); else printf("%d\n", (a*10)/b); } return 0;}
测试如下:
1 0
- 《算法竞赛入门经典》习题2-5 分数化小数(Decimal)
- 分数化小数 (decimal) 算法竞赛入门经典 第二版 习题 2-5
- 算法竞赛入门经典 习题2-9 分数化小数(decimal)
- 算法竞赛入门经典 习题2-9分数化小数
- 《算法竞赛入门经典第二版》习题2-5分数化小数问题
- 《算法竞赛入门经典》习题2-9 分数化小时(decimal)
- 算法竞赛入门经典2.5 2-5分数化小数
- 算法竞赛入门经典2.5 2-5分数化小数
- 习题2-5 分数化小数(decimal)
- 习题2-5 分数化小数(decimal)
- 刘汝佳p35,2-5(分数化小数)算法竞赛入门经典第二版
- 算法竞赛入门经典2-9分数化小数
- 算法竞赛入门经典(分数化小数)
- 习题2-5 分数化小数(decimal)
- 习题2-5 分数化小数 (decimal) (java版本)
- 习题2-5 分数化小数(decimal)
- 算法竞赛入门经典ch2_practice5分数化小数
- 小紫书 习题2-5 分数化小数(decimal)
- 循环小数
- 内存泄漏
- 对python几个常见的小函数进行学习使用
- Active MQ的使用
- Oracle 数据库基于SCOTT模式的分组技术和子查询
- 《算法竞赛入门经典》习题2-5 分数化小数(Decimal)
- 最高的奖励
- iOS 多线程之延迟操作
- Java里面的四大内部类
- SQL语句中常用关键词及其解释
- Android中第三方SDK集成之百度地图集成(入门篇)
- Mysql分区的使用
- 快速排序
- Qt登录对话框