输入正整数a,b,c,输出a/b的小数形式,精确到小数后c位。a,b<=10E6,c<=100。输入包含多组数据,结束标记为a=b=c=0。
样例输入:
1 6 4
0 0 0
样例输出:
Case 1:0.1667
解:这题分数化小数不难处理,重点在于控制小数位数不一定是多少。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
int main()
{
int a,b,c,n,n1;
while(scanf("%d%d%d",&a,&b,&c)==3 && a)
{
for(int count=0;; count++)
{
if(count)
{
if(count<=c)
printf("%d",n);
else
{
n1=a/b;
if(n1>=5)
printf("%d",n+1);
else
printf("%d",n);
break;
}
}
n=a/b;
a=(a-n*b)*10;
if(count==1)
printf(".");
}
printf("\n");
}
return 0;
}
这种是借鉴网上大神的模拟除法的方法c语言版本,能够解决double只能输出15~16位小数的问题。
做这题还学会在double,flaot范围内如何控制不定的小数位数 :
printf("%.*f\n",c,a/b);