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

C語言整數逆序輸出:位運算與取模除法雙重解法

     編輯:C 語言問答

整數逆序:從取模除法到位運算優化

問題

輸入一個整數(如 371),輸出其數字逆序(173)。

方法一:取模除法 (通用,適用任意進制)

#include <stdio.h>

int reverse_decimal(int n) {
    int rev = 0;
    int sign = n < 0 ? -1 : 1;
    n = n < 0 ? -n : n;  // 處理負數
    while (n != 0) {
        rev = rev * 10 + n % 10;
        n /= 10;
    }
    return rev * sign;
}

int main() {
    int n; printf("輸入整數: "); scanf("%d", &n);
    printf("逆序: %d\n", reverse_decimal(n));
    return 0;
}

方法二:字符串反轉 (簡單直觀)

#include <string.h>
void reverse_str(char *s) {
    int len = strlen(s);
    for (int i = 0, j = len - 1; i < j; ++i, --j) {
        char t = s[i]; s[i] = s[j]; s[j] = t;
    }
}

int main() {
    char s[20]; scanf("%19s", s);
    if (s[0] == '-') { reverse_str(s+1); printf("-%s\n", s+1); }
    else { reverse_str(s); printf("%s\n", s); }
    return 0;
}

進階:位逆序 (嵌入式常用,如 FFT 碎裂)


// 32位整數位逆序
uint32_t reverse_bits(uint32_t x) {
    x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1);
    x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2);
    x = ((x >> 4) & 0x0F0F0F0F) | ((x & 0x0F0F0F0F) << 4);
    x = ((x >> 8) & 0x00FF00FF) | ((x & 0x00FF00FF) << 8);
    x = (x >> 16) | (x << 16);
    return x;
}

注意事項

  • 前導零:逆序後前導零自動丟失(如 1200 → 21),若需保留位數須用字符串。
  • 溢出:rev * 10 + digit 可能超出 INT_MAX,建議用 long long 計算後檢查範圍。
  • 負數處理:記住符號,對絕對值操作,最後恢復符號。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved