獣医の秘密



Weeklyvita第2四半期コードテスト比較入門編
고대 유적지를 연구하던 인디아나 홍스는
유적지의 벽에 새겨진 엄청난 숫자들을 발견했다.
벽에 새겨진 숫자 중 일부는 비밀스러운 정보를 조회할 수 있는
열쇠 역할을 하는 비밀스러운 수이다.
오랜 연구 끝에 인디아나 홍스는 엄청난 숫자들이
특별한 규칙을 가지고 있다는 사실을 발견하였다.
엄청난 숫자들 중 의미있는 숫자들은
항상 2^k(0<=k) 형태로 적혀 있고,
그 외의 수들은 모두 비밀스러운 정보와는 관련 없다는 것이다.

인디아나 홍스를 도와 벽에 새겨진 숫자가 
비밀스러운 정보인지 아닌지를 판별해보자!

✔υ入力


最初の行の数字を指定します.
この数は10^18以下の自然数です.

勘定科目の出力


与えられた数字が機密情報を含む場合、Yesである.
そうでない場合、出力No.

💡 example1


input
32
output
Yes

💡 example2


input
1
output
Yes

💡 example3


input
10
output
No

🔑 解説


入力値には数値があります.
この数は10^18以下の自然数です.
△読数範囲を教えてくれる理由を考えてください.
変数numを宣言して入力値を受け入れます.
int num = 0;
関数scanfを使用して入力値を受け入れます.
scanf("%d", &num);
受け取った価格が正しいかどうかをテストしたほうがいいです.
もしあなたが価格を手に入れることに成功したら、
問題の要求に集中しましょう.
この問題は、
2の繰返し二乗で表すことができる場合、出力Yes.
そうでなければNoと書きます.
では、まずすべての奇数を除外します.num % 2 == 0の条件を利用することが望ましい.
二乗で表すことができます.
これは、分割を繰り返すときに分割することを意味します.
複文を用いた.
while (num % 2 == 0)
	num /= 2;
2の倍数を2で割った.
シェアは最終的に1だった.Yesを出力するか、Noを出力するかは、2つの条件文で表すとよい.
if (num == 1)
{
	printf("Yes");
   	return (0);
}
else
{
	printf("No");
   	return (0);
}
各文を出力し、return (0);でプログラムを終了します.

注意事項


前述したように、
問題で与えられたexample caseはいずれも通過することができる.
コミット時にTimeoutが発生します.
値を入力するには再考が必要です.10^18以下の自然水.
この範囲の最低価格から見ると、かなりの数と言えます.
最初は、複文の中でTimeoutが起こったと思います.
どれだけ駆動できるか確認しましたが、2^31までは正常にコンパイルされています.
しかし、出力値は正しくありません.
もちろん2の平方数を計算して加えたものです.Yesを出力するはずですが、Noを出力しました.
テスト中に新しいホットスポットが現れました.
しかし、ふと一つの考えが浮かんだ.typeです.
入力値を受信した変数numintとして宣言される.
入力値は自然数のみです.unsigned long intに変えてテストをしましたが、Yes出力済み...!
こうして、typeを変更して提出し、結果はAll passを獲得!
これは条件をもう一度よく検討する必要がある問題である.
Github_Repository