Online Compiler C

#include <stdio.h> int main() { int decimal; // 存储输入的十进制整数 int temp; // 临时存储十进制数(保护原始输入不被修改) int remainder; // 存储每次除以3得到的余数 int i = 0; // 数组下标计数器 int ternary[100]; // 存储三进制各位余数(低位→高位),足够容纳常规整数 // 输入提示:decimal(保持之前的设置) printf("decimal: "); scanf("%d", &decimal); // 特殊情况处理:输入为0时,输出提示替换为ternary if (decimal == 0) { printf("ternary: 0\n"); return 0; } // 负数处理:输出提示替换为ternary temp = decimal; if (decimal < 0) { temp = -temp; // 转为正数执行取余运算 printf("ternary: -"); } else { // 正数情况:输出提示替换为ternary printf("ternary: "); } // 核心算法:除3取余法,存储余数(低位→高位) while (temp > 0) { remainder = temp % 3; // 取当前数除以3的余数 ternary[i++] = remainder; // 存入数组,下标自增 temp = temp / 3; // 更新为商(整数除法,舍弃小数部分) } // 逆序输出:数组中是低位在前,逆序后得到高位在前的正确三进制数 for (int j = i - 1; j >= 0; j--) { printf("%d", ternary[j]); } printf("\n"); return 0; }
1) 这段代码将用户输入的十进制整数转换为三进制数并输出。它处理了正数、负数和零的情况,使用“除3取余法”计算三进制,并将结果逆序输出。

2) 提示:
   - 注意数组 `ternary` 中存储的是从低位到高位的余数,所以输出时需要从后往前逆序打印。
   - 当输入为负数时,程序会先输出负号,然后将负数转为正数进行计算,但最终的三进制结果需要正确反映负号。