该代码在大多数情况下都有效,但是当读取小数部分中带有前导零的分数时,结果是错误的:1.01 变为 11/10 而不是 101/100。
#include <cstdio>
int main()
{
unsigned long long x, y, nom, den;
scanf("%llu.%llu", &x, &(y=0));
for (den=1; den<=y; den*=10);
nom = x * den + y;
printf("%llu / %llu\n", nom, den);
return 0;
}
1.01
11 / 10
对于小数部分,不仅要计算数字,还要计算其开头和结尾的位置 - 然后根据它们的差值就可以得到正确的分母(如果没有点,则 scanf 将返回 1 - 必须将其作为整数处理)。同时我将向您展示一个通过星号退出的技巧。
运行tio