首页 > 解决方案 > 得到〜在标准输出上没有回应〜在hackerrank问题上

问题描述

我为 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 ~

标签: c++

解决方案


正如@RetiredNinja 所指出的,问题在于您正在调用未定义的行为

C++ 标准(2003)在 §5.6/4 中说,

[...] 如果 / 或 % 的第二个操作数为零,则行为未定义;[...]

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

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

未定义的行为,如果你不知道:

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

换句话说,如果你的程序中有未定义的行为,C++ 对程序中发生的事情没有任何限制。你的程序实际上可以做任何事情,包括——但不限于——不在std::cout.


推荐阅读