a038 - 數字翻轉
題目描述
題目要求讀取一個整數,並將其數字順序翻轉後輸出。需要注意的是,翻轉後的數字可能包含前導零,這些前導零需要被移除。
解題思路
此題的核心在於將輸入的整數逐位提取,並將這些位數按照相反的順序重新組合成一個新的整數。可以使用 while 迴圈來迭代輸入數字的每一位。在迴圈內部,使用取模運算符 (%) 獲取最低位數字,然後將其添加到翻轉後的數字中。同時,將原始數字除以 10 (使用整數除法) 以移除最低位數字。這個過程重複進行,直到原始數字變為 0。由於整數可能包含前導零,因此不需要額外的處理來消除前導零,因為整數類型本身會忽略前導零。
複雜度分析
- 時間複雜度: O(log n),其中 n 是輸入數字的大小。這是因為 while 迴圈的迭代次數與輸入數字的位數成正比,而位數與輸入數字的對數成正比。
- 空間複雜度: O(1),因為程式碼只使用了幾個整數變數來存儲輸入數字、翻轉後的數字和迴圈計數器,這些變數佔用的空間是固定的,與輸入數字的大小無關。
程式碼
#include <stdio.h>
int main()
{
int i, j;
while(scanf("%d",&i)!=EOF)
{
j = 0;
while(i)
{
j *= 10;
j += i % 10;
i /= 10;
}
printf("%d\n",j);
}
return 0;
}