首页 > 解决方案 > 进程以状态 -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

标签: c++

解决方案


在计算过程中,您可能正在写入超出数组末尾的内容并损坏了某些内容。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。确实如此。


推荐阅读