C中的十进制到八进制

aus*_*_aj 5 c decimal octal

我刚开始用KN King's C Programming:A Modern Approach(2ndEdn)教自己C语言.

我很享受,但是如果合适的话,我希望在这里发出奇怪的问题以获得建议,因为不幸的是我没有导师,有些人会提出更多问题然后他们回答!

我正在做一个关于输入整数并以八进制显示它的问题.它说有一种简单的方法可以做到,但这本书后面会有.我想出了以下内容:

// Convert a number to octal

int n, n2, n3, n4, n5, n6;

printf("Enter a number between 0 and 32767: ");

scanf("%d", &n);

n6 = n % 8;
n5 = (n / 8) % 8;
n4 = ((n / 8) / 8) % 8;
n3 = (((n / 8) / 8) / 8) % 8;
n2 = ((((n / 8) / 8) / 8) / 8) % 8;

printf("%d%d%d%d%d", n2, n3, n4, n5, n6);
Run Code Online (Sandbox Code Playgroud)

它运作正常,但我不擅长数学,并且想知道是否有更有效的方法来做到这一点,或者我是否尽可能地完成了它...

如果其他人有这本书,那就是Q4 p.71.

谢谢你的时间.安德鲁

PS我确实在搜索引擎中查找了但是找不到任何以"慢"方式执行的操作!

Jon*_*Jon 5

每个人都说得对,有一种内置的方法printf.但是自己做呢?

首先想到的是一个八进制数字正好是三位.因此,您可以通过这种方式进行转换:

  • while n != 0
  • 隔离的最左边的3位n进入d和打印d
  • 向左移n3位

代码很简单,但我没有提供它,所以你可以自己做(你需要熟悉按位移位 运算符才能这样做).


Fré*_*idi 4

最简单的方法可能是使用printf()'s%o 格式说明符

scanf("%d", &n);
printf("%o", n);
Run Code Online (Sandbox Code Playgroud)