如何保留大整数中的所有4并删除其他数字(多测试用例场景)
解决方案:处理超大整数并保留所有数字4
你的代码存在两个核心问题:
- 给定的大整数长度远超
unsigned long long的存储上限(该类型最多容纳约20位十进制数),用数值类型读取会直接溢出,导致数据错误。 - 代码仅统计4的个数,未实现保留所有4的需求。
正确的做法是将大整数当作字符串处理,这样既不会有溢出问题,也能轻松筛选出所有'4'字符。修改后的代码如下:
#include <iostream> #include <string> using namespace std; int main() { int t; cin >> t; while(t--) { string s; cin >> s; // 直接读取整串数字,无溢出风险 string result; for(char c : s) { if(c == '4') { result += c; } } cout << result << "\n"; } return 0; }
代码说明:
- 用
string存储大整数,彻底避免数值类型的溢出问题。 - 遍历字符串每个字符,将所有匹配'4'的字符追加到结果字符串中,自然保留原顺序。
- 输入方式采用
cin >> s,适用于无空格的纯数字输入场景,无需额外处理换行符。
如果输入的大整数可能包含换行或空格,可改用getline读取,同时注意处理测试用例数输入后的换行残留:
#include <iostream> #include <string> using namespace std; int main() { int t; cin >> t; cin.ignore(); // 忽略输入t后的换行符 while(t--) { string s; getline(cin, s); string result; for(char c : s) { if(c == '4') { result += c; } } cout << result << "\n"; } return 0; }
内容的提问来源于stack exchange,提问作者OUTSEET
相关产品推荐
相关产品推荐

