如何在C语言中用scanf读取99位整数以解决Quera编程题?
解决99位整数的读取与处理问题
由于long long类型最多仅能存储18位左右的整数,完全无法容纳99位的超大数值,因此必须改用**字符串(字符数组)**来存储和处理目标数字,具体修改方案如下:
核心修改思路
- 用字符数组替代整数类型存储数字:字符串可直接保留每一位的原始信息,不受数值范围限制。
- 读取输入时使用字符串格式符
%s,直接读取整个数字字符串。 - 遍历字符串时,通过
字符 - '0'的方式将字符转换为对应整数(利用ASCII码差值实现)。
修改后的完整代码
#include <stdio.h> #include <string.h> // 用于获取字符串长度的strlen函数 int main(){ char num[100]; // 定义足够大的字符数组,99位数字+1位字符串结束符 scanf("%s", num); // 直接读取字符串形式的数字 int len = strlen(num); // 获取数字的实际位数 int x = 0; while(x < len){ int digit = num[x] - '0'; // 将字符转换为对应的整数 printf("%d: ", digit); int z = 1; while(z <= digit){ printf("%d", digit); z++; } printf("\n"); x++; } return 0; }
关键细节说明
- 字符数组定义:
char num[100]预留了100个存储位置,足够容纳99位数字和字符串结束符\0。 - 字符转整数:
num[x]是字符类型(比如'7'),减去字符'0'的ASCII值(48)后,即可得到对应的整数7。 - 字符串长度获取:
strlen(num)直接返回字符串的实际长度,也就是数字的位数,省去了原代码中循环计算位数的步骤。 - 逻辑简化:字符串本身按顺序存储每一位数字,无需像原代码那样拆分整数到数组,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Pedram Arianmanesh
相关产品推荐
相关产品推荐

