如何在C语言中将输入的123转换输出为122333?
C语言实现数字按位重复输出(如输入123输出122333)
方案一:字符串转换法(简洁直观)
通过将整数转为字符串,直接遍历每一位字符并按要求重复输出,代码可读性高,适合快速实现:
#include <stdio.h> #include <string.h> int main() { int num = 123; char num_str[20]; // 将整数转为字符串,方便按位访问 sprintf(num_str, "%d", num); int len = strlen(num_str); // 遍历每一位,第i位(从0开始计数)重复i+1次输出 for (int i = 0; i < len; i++) { int repeat_times = i + 1; for (int j = 0; j < repeat_times; j++) { putchar(num_str[i]); } } putchar('\n'); return 0; }
方案二:数学拆分法(无需字符串操作)
如果不想依赖字符串转换,可通过数学运算拆分每一位数字,再按规则重复输出:
#include <stdio.h> #include <math.h> int main() { int num = 123; int temp = num; int digit_count = 0; // 统计数字的总位数 while (temp != 0) { temp /= 10; digit_count++; } // 从最高位到最低位依次处理每一位 for (int i = digit_count; i >= 1; i--) { int divisor = pow(10, i - 1); int digit = num / divisor; // 重复i次输出当前数字 for (int j = 0; j < i; j++) { printf("%d", digit); } // 移除已处理的最高位 num %= divisor; } printf("\n"); return 0; }
核心逻辑说明
两种方法的核心都是拆分数字的每一位,然后按位的位置(第n位重复n次)输出对应次数的数字。字符串法更简洁,数学法则能帮助理解数字的位运算逻辑,可根据需求选择。
内容的提问来源于stack exchange,提问作者조윤서
相关产品推荐
相关产品推荐

