C语言中无法用long long int读取300位数字,如何计算其各位之和
解决方法
对于超出整型存储范围的超长数字,直接用字符串存储即可,实现逻辑非常简单:
- 用字符数组读取输入的300位数字,300位数字只需要301字节的数组空间(多留1位存储字符串结束符
\0),完全不存在存储压力 - 遍历字符串的每一位字符,利用ASCII码的连续性,将字符转为对应数字:数字字符
c对应的整数值为c - '0' - 累加所有数字得到总和,300位数字的各位和最大为
300 * 9 = 2700,用普通int类型存储完全足够,不会溢出
可运行示例代码
#include <stdio.h> #include <string.h> int main(void) { char num[301]; int sum = 0; // 读取输入的数字字符串,加长度限制避免缓冲区溢出 scanf("%300s", num); for (int i = 0; num[i] != '\0'; i++) { sum += num[i] - '0'; } printf("%d\n", sum); return 0; }
拓展说明
如果输入的数字可能携带正负号,只需要加一步判断即可:如果首字符是+或-,遍历从下标1开始即可,符号位不需要计入求和。
内容的提问来源于stack exchange,提问作者mona
相关产品推荐
相关产品推荐

