c++ - 得到〜在标准输出上没有回应〜在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 ~
解决方案
正如@RetiredNinja 所指出的,问题在于您正在调用未定义的行为:
C++ 标准(2003)在 §5.6/4 中说,
[...] 如果 / 或 % 的第二个操作数为零,则行为未定义;[...]
也就是说,以下表达式调用 undefined-behavior(UB):
X / 0; //UB X % 0; //UB
未定义的行为,如果你不知道:
未定义的行为 - 对程序的行为没有限制。
换句话说,如果你的程序中有未定义的行为,C++ 对程序中发生的事情没有任何限制。你的程序实际上可以做任何事情,包括——但不限于——不在std::cout
.
推荐阅读
- c++ - Uno 的卡片类向量
- javascript - Firebase 身份验证检测用户是否来自重定向登录
- javascript - 如何从最大化 RAM 修复浏览器 blob 下载?
- curl - 我可以将笑话代码覆盖率添加到来自管道的 Bitbucket 拉取请求中的报告吗
- python - 如何从不同的内联查询中获取不同的 cache_times?
- c - 使用 C 将浮点数拆分为分数和积分
- firebase - 在 Android 上使用 Unity 中的 Firebase 登录 Apple 会引发“客户端与 api 密钥不匹配”异常
- javascript - 我可以在控制台中更改 A-Frame 组件的属性(从 false 循环到 true)吗?
- php - 如何在同一个 PHP 类中使用相同的随机生成的字符串
- json - 在 React 中基于 JSON 值动态添加 CSS 类