【发布时间】:2022-01-16 02:13:07
【问题描述】:
我们被分配了一项任务,将八进制数转换为二进制和十进制。较小的数字工作得很好,但它会在较高的输入下给出不同的输出。代码如下:
#include <stdio.h>
void main() {
unsigned long n, g, ans = 1, r = 0, dec = 0, place = 1, bin = 0;
printf("Conversion: Octal to decimal and binary.\n");
printf("Enter number: ");
scanf("%lu", &n);
printf("%lu is ", n);
for (g = n; g != 0; ans = ans * 8) {
r = g % 10;
dec = dec + r * ans;
g = g / 10;
}
printf("%lu in Decimal Form. \n", dec);
printf("%lu is ", n);
for (; dec != 0; place = place * 10) {
r = dec % 2;
bin = bin + (r * place);
dec = dec / 2;
}
printf("%lu in Binary Form.\n", bin);
}
我们只需要使用有限的数据类型和控制结构。没有数组、字符串、函数等。
我们老师的测试用例中的输入是575360400,它必须以二进制输出101111101011110000100000000,以十进制输出100000000。但是二进制的输出是14184298036271661312。我已经使用了unsigned long,但它不起作用。
我不知道在给定的限制下这是怎么可能的,你的 cmets 和答案会很有帮助。
【问题讨论】:
-
代码将输入读取为十进制。要将输入读取为八进制,请使用
scanf("%lo", &n); -
你可以使用
scanf,还是应该使用getchar()一次读取一个字符? -
@user3386109 关键字是否保持不变?我尝试在输入和输出上都使用
%lo,只有十进制输出是正确的,而不是二进制。 -
我们只需要使用
scanf