为什么在codechef中提交此代码时会出现运行时错误(SIGABRT)?

时间:2015-05-26 10:16:49

标签: c++

当我在我的系统上运行时,此代码会成功执行 但是当我在codechef上提交代码时,它会收到运行时错误(运行时错误(SIGABRT))。

此处是问题http://www.codechef.com/problems/LELUCKYN

的链接

这是什么错误,我该如何解决?

#include <iostream>
#include <vector>
#include <cmath>
#include <string>
using namespace std;

int main() {
    int t;
    cin >> t;
    for ( auto i = 1; i <= t; i++ ) {
        int n;
        cin >> n;
        vector<int> vec(n);
        for ( auto in = 0; in < n; in++ ) {
            int input;
            cin >> input;
            vec[in] = input;
        }
        int count = 0;
        for (int x = 0; x < vec.size(); x++ ) {
            for ( int y = x; y < vec.size(); y++ ) {
                string num="";
                for (int z = x; z <= y; z++ ) {
                    num.append(to_string(vec[z]));
                }
                int number = stoi(num);
                int c4 = 0, c7 = 0;
                while ( number != 0 ) {
                    int d = number % 10;
                    if ( d == 4) c4++;
                    else if (d ==7 ) c7++;
                    number/= 10;
                }
                int po = (int)pow( c4, c7 );
                if (c4 != 2 && c7 != 2 && po <= ( ( y - x ) + 1 )) count++;
            }
        }
        cout << count << endl;
    }
}

1 个答案:

答案 0 :(得分:0)

如果我正确阅读了您的代码,您将所有数字连接成一个字符串,然后尝试将其转换为int以计算数字。

该字符串并不总是可以转换为int,因为它太大了,stoi在这种情况下会抛出异常。

您可以只计算结果字符串中的数字(计数'4''7'而不是47 s),或< / em>您可以计算每个数字中的数字并将其相加,而无需进行字符串转换。