如何实现支持100位及以上数字输入并完成各位求和的程序?
解决超大位数数字的各位求和问题
你的核心问题是用数值类型存储超大数字——哪怕是long long int,最多也只能存18位左右的十进制数,100位的数字早就超出它的存储范围了,输入时直接溢出,后续处理全错。改vector大小、换long long都没碰对根因。
正确的做法是把输入当作字符串处理,直接遍历每个字符转成数字求和,完全不需要用数值类型存整个数。修正后的代码如下:
#include <iostream> #include <string> using namespace std; int main() { string num_str; cin >> num_str; // 用字符串接收任意长度的数字输入 int sum = 0; // 遍历字符串每一位 for (char c : num_str) { int digit = c - '0'; // 字符转对应数字,比如'3'转成3 cout << digit << endl; // 输出各位数字 sum += digit; } cout << sum << endl; return 0; }
顺便说下你原代码的其他问题:
- 用
pow计算10的幂是浮点运算,会有精度误差,比如pow(10, 20)可能不是精确的10^20,导致后续取位错误 - 你只收集大于0的数字,输入里的0会被忽略,比如输入100,原代码只会处理1,求和结果完全错误
内容的提问来源于stack exchange,提问作者Nikola
相关产品推荐
相关产品推荐

