分数化小数(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
#include <stdio.h>
#define MAX_LENGTH 120
//计算商
int GetFactor(int a, int b){
return a/b;
}
//计算余数
int GetRemainder(int a,int b){
return a-(a/b*b);
}
//是否整除
bool IsAliquot(int a, int b){
bool ret = false;
if(a%b==0)
{
ret=true;
}
return ret;
}
//模拟竖式计算
void Division(int a, int b, int precision, int ans[MAX_LENGTH])
{
if(precision > MAX_LENGTH)
{
return;
}
int i=0;
for(i=0; i<MAX_LENGTH; i++)
{
ans[i] = 0;
}
int calA = a, calB = b;
ans[0] = GetFactor(calA, calB);
//模拟竖式计算
for(i=1; i<=precision; i++)
{
if(IsAliquot(calA, calB) == true)//已经整除,不需要再继续进行下去
{
break;
}
calA = GetRemainder(calA, calB);
calA *= 10;
ans[i] = GetFactor(calA, calB);
}
}
void main()
{
int ans[MAX_LENGTH] = {0};
int a,b,c;
scanf("%d%d%d", &a, &b, &c);
if (c > MAX_LENGTH)
{
return;
}
//计算
Division(a, b, c, ans);
// printf("%d / %d , the answer is:(precision:%d)\n",a, b, c);
printf("%d.",ans[0]);
int i = 0;
for(i=1; i<=c ; i++)
{
printf("%d",ans[i]);
/* if(i%10==0)
{
printf(" ");
}*/
}
printf("\n");
// printf("Calculation finished!\n");
}