《算入竞赛入门经典2th》 习题 2-5 分数化小数(decimal)
程序员文章站
2024-03-18 23:12:40
...
#include <stdio.h>
int main (void)
{
int a = 0, b = 0, c = 0, kase = 0;
while(((scanf("%d%d%d", &a, &b, &c)) == 3)&&(a||b||c)) // 为了鲁棒性 且 结束标志为 a = b = c = 0.
{
int i = 0;
int r[120] = {0};
int z = a / b ; // 将整数部分保存至 z
a = a % b ; // 将余数保存至 a
while( a && i<c+1) //a (余数)如果为零 可跳过此步骤
{
do {
a *= 10;
i++;
}while(a < b);
r[i] = a/b; //注意 数组r 是从r[1] 开始储存余数的
a %= b;
}
if(r[c+1] > 5 ) r[c] += 1; //判断 第 n+1值的大小, 如果 大于 5 则向前进位
for(i = c; i>0; i--)
{
if(r[i]==10){
r[i]=0;
r[i-1] += 1; //判断被进位的是否满10 是就进位
}
else{
break; // 否则直接跳出循环
}
}
if(r[0] != 0) z += 1; // 考虑到r[1] = 10 时 会进位 即此时 r[0] !=0 所以整数部分 + 1
printf("Case %d: %d.", ++kase, z);
for(int i = 1; i < c +1; i++)
printf("%d", r[i]); //最后按小数形式输出
printf("\n"); //以回车结束
}
return 0;
}
下一篇: 分数化小数(decimal)