得到〜对stdout无反应〜关于hackerrank问题

时间:2019-07-23 00:27:25

标签: c++

我在HackerRank上写了一个简单问题的代码,您必须计算一个数字的位数,该数字将数字除以0余数。

我使用了一个基本的while循环来测试每个数字。测试用例的数量为t,数量为n。

我写的代码是:

#include <bits/stdc++.h>
#include<iostream>
using namespace std;

int main()
{
    int t;
    cin >> t;
    int count[t];
    for (int t_itr = 0; t_itr < t; t_itr++) {
        int n;
        cin >> n;
        int dig,temp=n;
        count[t_itr]=0;
        while(n>0){
            dig=n%10;
            if(temp%dig==0){
                count[t_itr]++;
            }
            n=n/10;
        }
    }
    for(int x=0;x<t;x++){
        cout<<count[x]<<endl;
    }
    return 0;
}

输入:

2
12
1012

预期输出:

2
3

我的输出:

~ no response on stdout ~

1 个答案:

答案 0 :(得分:0)

@RetiredNinja指出,问题是you are invoking undefined behavior

  

C ++ Standard(2003)在§5.6/ 4中说

     
    

[...]如果/或%的第二个操作数为零,则行为不确定。 [...]

  
     

也就是说,以下表达式会调用undefined-behavior(UB):

     

X / 0; // UB   X%0; // UB

Undefined Behavior,如果您不知道:

  

未定义的行为-对程序的行为没有任何限制。

换句话说,如果您的程序中包含未定义行为,则C ++对程序中发生的情况没有任何限制。 Your program can literally do anything,包括但不限于在position: fixed; top: 0; right: 0; bottom: 0; left: 0; 中不放任何东西。