解题报告——习题2-5 分数化小数(decimal) 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。
立志用尽量少的代码做高效的表达。
题目描述:
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。 a,b ≤10^6 ,c≤100。输入包含多组数据,结束标记记为a = b = c = 0。
样例输入:
1 6 4
0 0 0
样例输出:
Case 1: 0.1667
网上有很多错误代码,形如:
或者:
无论C格式,还是C++格式,都是错的!!!因为根本没办法显示几十位的小数!
因此,本题的核心思路只有这一个:数组存储高精度小数。
举例:
输入1 6 4, 首先将1扩大到100000,用100000除6,得到16666.666…要求保留小数点后四位,因此四舍五入后为:1667。输出整数部分与该数即可。
由于可能取到小数点后100位,因此所有数据用数组存储,模拟手算除法。
注意以下几组特殊数据(之所以判断进位那块儿的代码有点复杂,就是因为需要考虑第三种特殊情况。):
代码:
#include<bits/stdc++.h>
using namespace std;
int main() {int mol, den, num;while(cin >> mol >> den >> num && mol) {int a[110] = {0};int integer = mol/den;mol = mol%den;//1、为数组赋值 int siz = 0;do {a[siz++] = mol*10/den;mol = (mol*10)%den;}while(siz != num+1); //2、判断进位 int jin = 0;//进位 if(a[num] >= 5) { //满足四舍五入条件jin = 1; for(int i = num-1; i >= 0; i--) { //从后向前遍历,进位。a[i] += jin; if(a[i] == 10) {jin = 1; a[i] = 0;} else jin = 0;}} if(jin != 0) integer += 1; //如果到最后进位还没有给掉,那么将进位给到整数位 //3、输出 cout << integer << '.';for(int i = 0; i < num; i++) {cout << a[i];}putchar('\n'); }return 0;
}
二更: 应读者要求, 加了C语言版代码
#include<stdio.h>
int main() {int mol, den, num;while(scanf("%d%d%d", &mol, &den, &num) && mol) {int a[110] = {0};int integer = mol/den;mol = mol%den;//1、为数组赋值 int siz = 0;do {a[siz++] = mol*10/den;mol = (mol*10)%den;}while(siz != num+1); //2、判断进位 int jin = 0;//进位 if(a[num] >= 5) { //满足四舍五入条件jin = 1; for(int i = num-1; i >= 0; i--) { //从后向前遍历,进位。a[i] += jin; if(a[i] == 10) {jin = 1; a[i] = 0;} else jin = 0;}} if(jin != 0) integer += 1; //如果到最后进位还没有给掉,那么将进位给到整数位 //3、输出 printf("%d.", integer);for(int i = 0; i < num; i++) {printf("%d", a[i]);}putchar('\n'); }return 0;
}
如果对你产生了帮助,就请给博主点一个小小的赞吧!大家的点赞是我不断更新的最大动力!
解题报告——习题2-5 分数化小数(decimal) 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。相关推荐
- ACMNO.2 输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 输入 一个华氏温度,浮点数 输出 摄氏温度,浮点两位小数
题目描述 输入一个华氏温度,要求输出摄氏温度.公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数. 输入 一个华氏温度,浮点数 输出 摄氏温度,浮点两位小数 样例输入 -40 样例输出 c ...
- 化简分数,输入分子和分母,输出化简后的分子和分母。采用无脑迭代法;
1.令min等于分子与分母中小的那个值 2.i从2到min循环,若 分子分母都能除尽i,则修改分子,分母,min以及i,令i再次从2开始循环 int main() {int a, b;printf ...
- 分数化小数c语言题目,习题 2-5 分数化小数 (decimal)(C语言版)
习题描述:"输入正整数 a, b, c,输出a/b的小数形式,精确到小数点后c位.a, b<= 10^6, c<=100.输入包含多组数据,结束标记为 a=b=c=0." ...
- 分数化小数(c语言)
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位.a,b≤10 6 ,c≤100.输入包含多组数据, 结束标记为a=b=c=0. 样例输入: 1 6 4 0 0 0 样例输出: Case ...
- 分数化小数(模拟除法操作)
题目:输入a, b, c,输出a/b的小树形式,精确到小数点后c位.a,b <= 1e6, c <= 100; 输出包含多组数据,结束标记为a = b = c = 0. 样例输入:1 ...
- 分数化小数(用变量控制小数位数)
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位.a,b<=10e6,c<=100.输出包含多组数据,结束标志为a=b=c=0. 样例输入: 1 6 4 0 0 0 样例输出 ...
- 上海市计算机学会2022年10月月赛丙组解题报告
上海市计算机学会2022年10月月赛丙组解题报告 直角三角形的判定 题目描述 给定三个正整数表示三角形的三条边,请判定它是否为直角三角形 输入格式 第一行:三个整数 a,b 与 c 输出格式 若可以构 ...
- 输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。...
题目描述 输入一个华氏温度,要求输出摄氏温度.公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数. 输入 一个华氏温度,浮点数 输出 摄氏温度,浮点两位小数 样例输入 -40 样例输出 c ...
- java-从键盘输入一串字符,输出不同的字符以及每个字符出现的次数。(输出不按照顺序)运用String类的常用方法解题
从键盘输入一串字符,输出不同的字符以及每个字符出现的次数.(输出不按照顺序)运用String类的常用方法解题 package labreport7;import java.util.Scanner;/ ...
最新文章
- Remove Nth Node From End of List leetcode java
- LeetCode题组:第9题-回文数
- 电容式传感器位移性能试验报告_圆柱形电容式接近开关可以分3类?
- SAP Spartacus cost center list里通向detail页面的url生成逻辑
- 100行代码实现了多线程,批量写入,文件分块的日志方法
- Android布局怎么画图形,Android开发者的图形化布局
- IEnumerable和IQueryable的区别
- 初探数位DP-hdu2089
- 信息学奥赛一本通(1313:【例3.5】位数问题)
- 织梦dede模板|白绿色户外拓展教育培训网站织梦dede模板源码[带手机版数据同步]
- matplolib绘图
- 在Mac OS X上安装Oracle客户端
- 51单片机的轮胎气压监测系统_汽车的胎压监测系统有哪些作用?
- Ubuntu 11.04 下安装配置 JDK 7
- RSA私钥及公钥生成
- his提供哪些服务_品牌战略咨询能为企业提供哪些服务
- pc软件签名:数字证书的使用
- 上位机和下位机的区别是什么
- WIN10开启Hyper-V虚拟化功能
- 在UBUNTU 13.1 中使用五笔拼音混合输入法