入力値を入れた number を、逆順を求めるときに変更してしまっているためです。
例えば、別の変数にコピーしてから使用するなどしてください。
また、reverse の計算も間違えています。
今のコードだと、最後の1桁しか残っていないと思います。
追記です。
numberが変更になっている認識が持てないのですが。
具体的に教えていただけますでしょうか。
例えば、デバッグ用に printf を入れてみます。★印の位置です。
#include <stdio.h>
int main(void)
{
int number, reverse = 0, bkup;
do {
scanf("%d", &number);
} while (number <= 0);
bkup = number;
while (number > 0){
reverse = number % 10;
number /= 10;
printf("r=%d, n=%d\n", reverse, number); /* ★ */
}
if (number ==reverse){
printf("y\n");
}else {
printf("n\n");
}
return 0;
}
実行結果はこうなります
$ cc a.c
$ echo 1303031 | ./a.out
r=1, n=130303
r=3, n=13030
r=0, n=1303
r=3, n=130
r=0, n=13
r=3, n=1
r=1, n=0
n
number は最後に 0 に変更されていますよね?
また reverse も 1 になっています。
number /= 10;
というのは、ほぼ number = number / 10;
と同じ意味です。
(略)にすると計算が正しいでしょうか。
そうですね。
#include <stdio.h>
int main(void)
{
int number, reverse = 0, bkup;
do {
scanf("%d", &number);
} while (number <= 0);
bkup = number;
while (number > 0){
reverse = reverse*10 + number % 10;
number /= 10;
printf("r=%d, n=%d\n", reverse, number); /* ★ */
}
if (number ==reverse){
printf("y\n");
}else {
printf("n\n");
}
return 0;
}
$ cc a.c
$ echo 1303031 | ./a.out
r=1, n=130303
r=13, n=13030
r=130, n=1303
r=1303, n=130
r=13030, n=13
r=130303, n=1
r=1303031, n=0
n
最後の判定以外 は問題無いように思います。
number を別の変数にコピーしてから使用するなどして対策をしてください。
上記を使うと下記の出力のみにならないため使用不可です
printf()はデバッグ用(number が変更されていることの確認用)にいれたものです。
動作を確認して、問題がなくなったら、削除してもよいものです。
もしかしたら、手元ではコンパイル・実行環境がないということでしょうか?
(動作確認をしないで、何かのシステムに直接ソースコードを提出しているってことですかね?)
慣れないうちは、手元でコンパイル・実行環境を作って動作を確認してみるとよいと思います。
もし、どうしても手元でコンパイル環境が構築できない場合には、以下のようなサイトを使ってみてもよいと思います。
「コード作成を試してみる」をクリックして、言語を選ぶところで C を選んで、ソースを入力し、下にある「入力」ところに入力データ(今回だと 1303031 など)を入れて、実行ボタンを押せば動かせます。
まずは、いろいろ試して思った通りに n/y が出せるようになったら(デバッグ用の printf などを削除してから)、提出するとよいと思います。