Chào mọi người. Mình đang làm bài toán “Nhập vào một số nguyên dương n, cho biết đó có phải là số đối xứng hay không?”.
Hướng giải của mình :
-
B1. Nhập vào số nguyên dương n
-
B2. Xác định số chữ số của số nhập vào (idem)
-
B3. Xác định số đảo ngược của số nhập vào.
-
B4. So sánh -> kết luận.
Dưới đây là code :
int main()
{
int iN = 0, idem = 0, isoDaoNguoc = 0;
do
{
printf("Hay nhap vao mot so nguyen duong n bat ky :");
scanf("%d",&iN);
if (iN < 0)
printf("So ban vua nhap khong phai la mot so nguyen duong.\n");
}while (iN < 0);
int temp1 = iN;
while(temp1!=0)
{
temp1 /= 10;
idem++;
}
printf("%d\n",idem);
int temp = iN;
for (int iDem = idem - 1; 0 <= iDem; iDem--)
{
int sodu = 0;
sodu = temp % 10;
temp /= 10;
isoDaoNguoc = isoDaoNguoc + sodu * pow(10,iDem);
}
printf("%d\n",isoDaoNguoc);
if (iN==isoDaoNguoc)
printf("So %d la so doi xung",iN);
else
printf("So %d khong phai la so doi xung",iN);
return 0;
}
Tuy nhiên khi chạy thì xảy ra trường hợp :
-
Nhập vào số 1234 thì số đảo ngược là 4321 -> báo không phải số đối xứng. Code chạy ok.
-
Nhập vào 121 thì số đảo ngược là 120 -> báo không phải số đối xứng. Code sai.
-
Nhập vào 123321 thì số đảo ngược là 123321 -> báo số đó là số đối xứng. Code chạy ok.
Mình có print ra biến idem và số đảo ngược để kiểm tra thì thấy biến idem ra giá trị đúng.
Vậy mình không hiểu sao lại có trường hợp sai trường hợp đúng như trên.
Mình biết bài này rất cơ bản, mình có search lời giải trên mạng nhưng họ dùng cách khác ngắn gọn hơn. Ở đây điểm mình muốn biết là TẠI SAO CODE CỦA MÌNH LẠI SAI? MÌNH KHÔNG NGHĨ RA ĐIỂM SAI. Mình là newbie. Mong mọi người giúp. Cảm ơn!
ta quan sát chuỗi biến đổi sau:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?