题目描述
你的任务呢,是将一个有理数转换成三进制小数。“什么是三进制小数呢?”你一定会问,这很明白,就是以三为基(二进制数以2为基,而十进制数则以10为基)的小数。
输入
有理数的值都是在0与1之间的,每个有理数都由一个分子和一个分母表示,分子与分母之间隔着一个斜杠。有理数的个数不会超过1000个。
输出
输出格式见样本输出,它是以小数点开头的具有10位精度的3进制数。
样例输入
1/3
1/4
1/6
7/8
样例输出
.1000000000
.0202020202
.0111111111
.2121212122
#include <stdio.h>
int main() {
int a, b;
double ans;
int ans_int[12];
int i;
while (scanf("%d/%d", &a, &b) != EOF) {
ans = (double) a / b;
for (i = 0; i <= 10; i++)
{
ans *= 3;
ans_int[i] = (int) ans;
ans -= ans_int[i];
}
if (ans_int[10] == 2)
{
ans_int[9]++;
}
for (i = 9; i >= 0; i--)
{
if (ans_int[i] == 3)
{
ans_int[i] = 0;
ans_int[i - 1]++;
}
}
printf(".");
for (i = 0; i < 10; i++)
{
printf("%d", ans_int[i]);
}
printf("\n");
}
return 0;
}
398

被折叠的 条评论
为什么被折叠?



