首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言實作數字翻轉:兩種演算法完整解析(含百度面試題)

     編輯:關於C語言

C語言實作數字翻轉:兩種演算法完整解析(含百度面試題)

數字翻轉是經典面試題。本文提供兩種方法:直觀的「逐位剝離法」與模組化的「位數計算法」,並分析其優缺點與適用場景。

方法一:逐位剝離法(直觀易懂)

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n, result = 0;
    scanf("%d", &n);
    while (n != 0) {
        int digit = n % 10;      // 取最低位
        result = result * 10 + digit; // 累加到結果
        n /= 10;                 // 去掉最低位
    }
    printf("翻轉後的數字:%d\n", result);
    return 0;
}

原理:利用取餘(%10)獲取個位數,除以 10 捨去個位,結果乘 10 往左移位再加新數字。時間 O(log n),空間 O(1)。

方法二:模組化設計(百度面試題風格)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 取得整數位數
int getWei(int num) {
    int wei = 0;
    for (int tmp = num; tmp != 0; tmp /= 10) wei++;
    return wei;
}

// 計算 10 的 n 次方
int pow10(int n) {
    int res = 1;
    while (n--) res *= 10;
    return res;
}

int main() {
    int num, result = 0;
    scanf("%d", &num);
    int wei = getWei(num);
    for (int i = 0; i < wei; i++) {
        int digit = (num / pow10(i)) % 10; // 由低位到高位取數
        result += digit * pow10(wei - 1 - i); // 放到對應高位
    }
    printf("翻轉結果:%d\n", result);
    return 0;
}

設計亮點:

  • 功能分解為 getWei、pow10 等可複用模組
  • 展示「先算位數、再定位翻轉」的數學思維
  • 適合需要擴充功能(如支援大數、不同進位)的場景

比較與建議

維度方法一方法二
可讀性⭐⭐⭐⭐⭐⭐⭐⭐
程式碼長度極短較長
擴充性低高(模組化)
面試推薦快速解題首選展示架構能力

邊界情況處理

  • 負數:可先記錄符號,處理絕對值,最後加回符號
  • 尾部零:如 1200 → 21(前導零自然消失)
  • 溢位:若翻轉後超出 INT_MAX 需用 long long 或字串處理

掌握兩種思維,既能快速解題,又能在系統設計中靈活套用模組化原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved