C语言实现Decimal to octal converter输出反向的解决方法问询
C语言十进制转八进制结果反向问题修复方案
问题原因
你的代码中每次通过q%8计算得到的是八进制数的最低位,直接按计算顺序打印会导致结果倒置,比如输入十进制10时会输出21,而非正确的八进制结果12。
修复方案(存储后反转输出)
你可以用一个整型数组存储每一步计算出的余数与最终的商,最后倒序输出数组内容即可得到正确结果,参考实现代码如下:
#include <stdio.h> int main(){ int n; printf("Enter the integer: "); scanf("%d",&n); // 兼容负数输入,不需要可删除本段 if(n < 0) { printf("-"); n = -n; } int q = n; // 32位整型转八进制最多11位,开20位数组足够存储 int oct_bits[20], count = 0; if (n < 8) { oct_bits[count++] = n; } else { while(q >= 8) { int r = q % 8; q = q / 8; oct_bits[count++] = r; } oct_bits[count++] = q; } // 倒序输出所有位得到正确结果 for(int i = count - 1; i >= 0; i--) { printf("%d", oct_bits[i]); } return 0; }
可选简化方案(递归实现)
你也可以通过递归利用函数调用栈的先进后出特性,无需手动定义存储数组即可实现正序输出:
#include <stdio.h> void dec_to_oct(int num) { if(num >= 8) { dec_to_oct(num / 8); } printf("%d", num % 8); } int main(){ int n; printf("Enter the integer: "); scanf("%d",&n); if(n < 0) { printf("-"); n = -n; } dec_to_oct(n); return 0; }
内容的提问来源于stack exchange,提问作者Eyy boss
相关产品推荐
相关产品推荐

