Octal Fractions Time Limit: 2 Seconds Memory Limit: 65536 KB Fractions in octal (base 8) notation can be expressed exactly in decimal notation. For example, 0.75 in octal is 0.963125 (7/8 + 5/64) in decimal. All octal numbers of n digits to the right of the octal point can be expressed in no more than 3n decimal digits to the right of the decimal point.
Source: South Africa 2001 |
Copyright @ 2001-2018, Zhejiang University ACM/ICPC Team, All rights reserved.
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=86
模拟除法运算:从8进制的最低位开始除以8,加上他的上一位。
0.75 5/8 = 0.625
(0.625 + 7)/8 = 0.93125
真正运算的时候不带小数算
75
5/8 625
7625/8 93125
是这样的,最后输出的时候加上小数点即可。
#include<cstdio>
#include<cstring>
const int MaxN = 1001;
int main()
{
int i, j;
char src[MaxN];
while (scanf("%s", src) != EOF)
{
char dest[MaxN] = {'0'};
int index = 0;//十进制的位数
for (i=strlen(src)-1;i>1;i--)
{
int num = src[i] - '0';
int temp;
//当前位数没有除尽或者还有余数的的时候
for (j=0;j < index || num;j++)
{
temp = num * 10 + (j < index ? (dest[j] - '0') : 0);
dest[j] = temp / 8 + '0';
num = temp % 8;
}
index = j;//更新当前位数
}
printf("%s [8] = 0.%s [10]\n", src, dest);
}
return 0;
}