c++ - 进程以状态 -1073740940 终止
问题描述
背景:我正在编写一个c ++程序来解决这个问题:
对于正整数 N,N 的数字和定义为 N 本身及其数字的和。当 M 是 N 的数和时,我们称 N 为 M 的生成元。例如,245 的数和是 256(= 245 + 2 + 4 + 5)。因此,245 是 256 的生成器。毫不奇怪,有些数字没有任何生成器,而有些数字有多个生成器。例如,216 的生成器是 198 和 207。你要编写一个程序来找到给定整数的最小生成器。
输入
你的程序是从标准输入中读取的。输入由 T 个测试用例组成。测试用例的数量 T 在输入的第一行中给出。每个测试用例占一行,包含一个整数 N,1 ≤ N ≤ 100, 000。
输出
您的程序将写入标准输出。为每个测试用例打印一行。该行将包含每个测试用例的 N 生成器。如果 N 有多个生成器,则打印最小的。如果 N 没有任何生成器,则打印“0”。
我的问题:下面的程序总是以状态-1073740940终止,我想知道为什么需要一些帮助
int main()
{
int* ans = new int[100005]();
int y;
int i_op;
for(int i = 1; i < 100001; ++i){
y = i;
i_op = i;
while(i_op){
y += i_op%10;
i_op /= 10;
}
if(ans[y] == 0 || i < ans[y]){
ans[y] = i;
}
}
int t;
int n;
cin >> t;
for(int i = 0; i < t; ++i){
cin >> n;
cout << ans[n] << endl;
}
//========================
//problem occurs here //after doing all output, the process terminated with status -1073740940
//========================
delete[] ans;
return 0;
}
输入数据:(均以状态-1073740940终止)
10
70587
38943
37061
95352
84205
96532
21150
26337
97804
65891
和
100000
1
2
……
100000
解决方案
在计算过程中,您可能正在写入超出数组末尾的内容并损坏了某些内容。i = 99999 会发生什么?我认为 100005 不足以容纳它。让我们检查:
#include <stdio.h>
int main() {
int i = 99999;
int y = i;
int i_op = i;
while(i_op){
y += i_op%10;
i_op /= 10;
}
printf("%d\n", y);
}
输出 100044。确实如此。
推荐阅读
- c - 添加两个符合 IEEE-754 标准的整数的逻辑是否不正确?
- xamarin.forms - android模拟器上叠加的图像
- node.js - MongoDB 更新/刷新集合
- excel - 保护单元格或范围的条件格式
- javascript - Discord.js - 角色中的用户通过 DM 添加
- python - 使用 python 模块最有效的方法是什么?
- android - 在一种特定情况下未观察到 LiveData
- python - 如何从列表数据中省略最后一个空字符串?
- asp.net-mvc-4 - 数据层中的代码优先迁移问题
- reactjs - 有没有办法让材料ui抽屉固定高度(并锚定底部)