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

C語言求整數各位數字之和:字符串法與數學法雙重解析

     編輯:關於C語言

問題描述

輸入一個非負整數(可能超出 int 範圍),計算其十進制各位數字之和。

輸入範例: 2147483646
輸出範例: 45

方法一:字符串處理法(適合超大數)

#include <stdio.h>
#include <string.h>

int main() {
    char s[100];
    scanf("%99s", s); // 防止緩衝區溢出
    int sum = 0;
    for (int i = 0; s[i]; i++) {
        if (s[i] >= '0' && s[i] <= '9')
            sum += s[i] - '0'; // ASCII 轉數值
    }
    printf("%d\n", sum);
    return 0;
}

優點: 無長度限制(受緩衝區大小約束),處理超大整數輕鬆。
關鍵點: '0' == 48,字符減 '0' 得數值,比硬編碼 -48 可讀性更強。

方法二:數學運算法(高效、無緩衝區)

#include <stdio.h>

int main() {
    unsigned long long n; // 支持 64 位
    scanf("%llu", &n);
    int sum = 0, digits = 0;
    while (n) {
        sum += n % 10;
        n /= 10;
        digits++;
    }
    printf("位數:%d,各位和:%d\n", digits, sum);
    return 0;
}

優點: O(log₁₀ n) 時間,O(1) 空間,無字符串開銷。
注意: 輸入 0 時循環不執行,需單獨處理。

進階:通用數位 DP 思想

若需統計區間 [L, R] 內所有數的各位和,可用數位 DP,狀態 dp[pos][sum][tight],此處不展開。

常見面試變體

  • 同時求位數與各位和(如示例)
  • 求各位數字乘積
  • 判斷是否為阿姆斯壯數(各位 n 次方和等於自身)
  • 大整數(百位以上)採用字符串或大整數庫

總結

「各位數字之和」是考察基本輸出、循環、數學運算或字符串處理的經典入門題。字符串法適合超長整數與快速編碼;數學法效率更高、內存更省。實際工程中視數據範圍選擇,並注意邊界情況(0、負數、非數字字符)。

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