# Math# Iteration

a038 - 數字翻轉

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取一個整數,並將其數字順序翻轉後輸出。需要注意的是,翻轉後的數字可能包含前導零,這些前導零需要被移除。

解題思路

此題的核心在於將輸入的整數逐位提取,並將這些位數按照相反的順序重新組合成一個新的整數。可以使用 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;
}

Discussion