2 versoon versoon 于 2016.02.17 13:01 提问

简单编程题:分数化小数,怎么用变量作为输出的小数位?

题目:输入正整数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
我的代码如下,还没有完善,如果有其他不足也恳请指教!谢谢
#include
int main()
{
int a,b,c,kase=0;
double res;
while(scanf("%d%d%d",&a,&b,&c)&&(a!=0&&b!=0&&c!=0))
{
res=a/b;
printf("Case %d: ",++kase,c,res);
}
return 0;

}

3个回答

u011073953
u011073953   2016.02.17 17:20
已采纳

http://blog.csdn.net/nanashiro/article/details/8284922
这个源码试试吧。他没保存小数点后面的数字而是直接输出了。
你想保存。那就多一步,存到char数组里就行。

u011073953
u011073953   2016.02.17 14:02

100位小数啊。你用double保存绝对不行的。double不可能精确到小数点后100位(你想想,小数点后100位,如果要精确,至少要10^100这么大数据量,这个量,double绝对达不到的,一共才4位(可能是8位不记得了))
建议用char c[101] 这样保存。模拟人工算法来计算。参考高精度除法算法。应该可以的。

u011073953
u011073953 回复versoon: 这个好说啊,char数组以\0结尾。你在计算时候,比如需要50位,那计算到51位时候就直接退出,然后在数组末尾放一个\0就行了。
2 年多之前 回复
versoon
versoon 那么输出部分以变量c为输出长度怎么表示呢?
2 年多之前 回复
u011073953
u011073953 补充下,char c[100]可能都不够。万一是类似10000000/3这样的。小数点前还很多。反正数组你开大点 不怕内存不够。
2 年多之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.17 22:27

这个可以啊!没问题,只要你定义了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
《算法竞赛入门经典》习题2-5 分数化小数(Decimal)
原题 题意:输入正整数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)解
分数化小数
《编程之美》有一个题是给定一个小数,将其转化成最简分数,思路比较简单,首先将小数转化成分数,然后对分数化简。如果将问题倒过来,给定一个分数(N/D),将其转化成对应的小数,这该如何做? 我们先分析一下分数转化成小数的可能情况:1)小数是一个有限小数(0.abc…d);2)小数是纯循环小数(0.);3)小数是非纯循环小数(0.ab…c)。分数不可能产生无限不循环小数。第一种情况无需特殊考虑,只需要
C语言 分数化小数
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤10 6 ,c≤100。输入包含多组数据, 结束标记为a=b=c=0。样例输入:1 6 40 0 0样例输出:Case 1: 0.1667这道题靠计算机本身来做除法是会出现精度问题的,所以要模拟数学上的除法:#include <stdio.h>int main() { int a, b, c, ct = 1; w
《算法竞赛入门经典第二版》习题2-5分数化小数问题
《算法竞赛入门经典第二版》习题2-5分数化小数问题
习题2.9:分数化小数
题目:输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位
ACM刷题之HDU————小数化分数2
小数化分数2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4313    Accepted Submission(s): 1745 Problem Description Ray 在数学课上听老师说,任何小数都能表示成
C++——分数化小数
用double可以使小数精确到小数点后好多位,那么要是要精确到99位呢???当然是酱紫做啦~
分数化小数并找出循环节
输入两个数字m,n,输出m/n的结果,并找出循环节 0<=m,n<=10000
分数转化小数C语言
C语言编写 将分数转化成小数输出。简单源码。适合新手参考。
[C++]小数转化为分数(class)
/*Rational.cpp*/#include "Rational.h" #include #include #include using namespace std; void Rational::change(string num, int fz, int fm) { bool flag = 0; char ch; for (int i = 0; i < num.length(