我在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 ~
答案 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;
中不放任何东西。