解题报告——习题2-5 分数化小数(decimal) 输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。

Isadora ·
更新时间:2024-11-15
· 506 次阅读

励志用尽量少的代码做高效的表达。 题目描述:

输入正整数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 //万能头文件 using namespace std; int main() { int a, b, c, num = 0; //num做计数器 while(cin >> a >> b >> c && a != 0) { a = (a%b); //保证分子小于分母 int a1[c+2]; //定义被除数数组 memset(a1, 0, sizeof(a1)); a1[0] = a; //置0 int b1[c+1]; memset(b1, 0, sizeof(b1)); //定义存放结果的数组,置0 for(int i = 0; i =1) //四舍五入 if(b1[c]>=5) b1[c-1]+=1; cout << "Case " << ++num << ": " << a/b << '.'; //输出 for(int i = 0; i < c; i++) cout << b1[i]; cout << endl; } return 0; } 如果对你产生了帮助,就请给博主点一个小小的赞吧!大家的点赞是我不断更新的最大动力!
作者:小张同学Dayday Up



DECIMAL 输入 小数点

需要 登录 后方可回复, 如果你还没有账号请 注册新账号