#include <iostream>
#include <cstdio>
using namespace std;
bool numar(unsigned long long n)
{
return (n > 99) && ((n % 100) == 25);
}
int main()
{
freopen("numere.in", "r", stdin);
freopen("numere.out", "w", stdout);
int cnt = 0;
unsigned long long n, a, Nblabla, N;
while (scanf("%d", &n) == 1)
{
if (numar(n))
{
a = (n - 25) / 100;
cout << a; // This son of a *****.
for (N = 1; true; N++)
{
Nblabla = N * (N + 1);
if (Nblabla > a)
break;
else if (Nblabla == a)
{
cnt++;
}
}
}
}
printf("%d", cnt);
return 0;
}
简单地说,如果我评论该行(cout << a;
),程序就会停止工作。如果我把它留在那里,它就有效
我正在使用Code :: Blocks,GNU GCC。
这只是检查数字是否是以数字5
结尾的数字的平方。 (基数10)(我不允许使用平方根)
在问之前,不,这不是功课。这是我对在线竞赛主题的提交。
谁能告诉我为什么会这样?
答案 0 :(得分:1)
使用%d
格式,scanf
会尝试读取指向int
的指针。但是&n
是指向unsigned long long
的指针。这会导致未定义的行为,这可能是您出现奇怪结果的原因。
正确的格式为%llu
。