C++如何根据输入的X值输出末尾带对应数量0的整数?
错误原因与修正方案
- 核心错误原因:32位int类型取值范围不足,常规32位int的最大值为
2^31-1 = 2147483647,当X≥10时,你需要得到的1后面10个0对应数值为10000000000,已经超过int上限,触发整数溢出,结果为未定义行为,自然输出错误。 - 你代码里的while判断条件
X > 0 && X <100逻辑没有问题,不需要修改,只需要调整变量类型或者改用字符串输出即可适配不同范围的X。
修正方案
方案1:适配1≤X≤18的场景(用64位整数存储结果)
64位无符号整数unsigned long long的最大值约为1.8e19,最多支持1后面18个0,满足多数小数值场景需求:
#include <iostream> using namespace std; int main () { int X, i=0; // 把allHeKnows的类型从int换成unsigned long long unsigned long long allHeKnows = 1; cin >> X; // 增加范围校验,避免溢出 if (X <= 0 || X >= 19) { cout << "X超出整数可存储范围,当前仅支持1≤X≤18" << endl; return 1; } while ((X > 0 && X <100) && (i!=X)) { i++; allHeKnows = allHeKnows * 10; } cout << "allHeKnows = " << allHeKnows << "\n"; return 0; }
方案2:适配所有1≤X≤99的场景(字符串输出,无溢出问题)
如果不需要对allHeKnows做后续数值计算,直接输出字符串即可,完全避免溢出问题,实现也更简单:
#include <iostream> #include <string> using namespace std; int main () { int X; cin >> X; if (X <=0 || X >= 100) { cout << "X超出设定范围(1≤X≤99)" << endl; return 1; } // 直接输出1加X个0的字符串即可 cout << "allHeKnows = 1" << string(X, '0') << "\n"; return 0; }
内容的提问来源于stack exchange,提问作者valentin_nm
相关产品推荐
相关产品推荐

