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

C 語言求和:a + aa + aaa + ... (n 個 a) 通項公式與 for 循環實現

     編輯:程式設計綜合問答

問題數學建模

給定正整數 a (1-9) 和 n (1-9),求 S = a + aa + aaa + ... + n個a。

通項公式:

  • 第 1 項:T₁ = a
  • 第 2 項:T₂ = aa = a×10 + a = T₁×10 + a
  • 第 k 項:Tₖ = Tₖ₋₁ × 10 + a

C 語言標準實現

#include <stdio.h>

int main() {
    int a, n;
    printf("輸入 a 和 n (1-9): ");
    scanf("%d %d", &a, &n);
    
    if (a < 1 || a > 9 || n < 1 || n > 9) {
        printf("輸入超出範圍\n");
        return 1;
    }
    
    long long sum = 0;
    long long term = 0;  // 使用 long long 防止溢出
    
    for (int i = 1; i <= n; i++) {
        term = term * 10 + a;  // 通項遞推
        sum += term;
    }
    
    printf("s = %lld\n", sum);
    return 0;
}

運行示例

輸入: 2 3
過程:
i=1: term=2,   sum=2
i=2: term=22,  sum=24
i=3: term=222, sum=246
輸出: s = 246

關鍵點解析

  1. 通項遞推:term = term * 10 + a 避免字符串操作,效率高
  2. 數據類型:n=9, a=9 時最大項 999,999,999,和約 109,long long 安全
  3. 輸入驗證:題目限定 1-9,代碼增加邊界檢查
  4. 輸出格式:完全匹配「s = 結果」要求

進階優化(數學閉式解)

利用等比數列求和公式可 O(1) 計算:


// S = a/9 * [ (10^1-1) + (10^2-1) + ... + (10^n-1) ]
//   = a/9 * [ (10^(n+1)-10)/9 - n ]
long long sum = a * ( (pow(10, n+1) - 10) / 9 - n ) / 9;

注意:浮點運算可能引入精度誤差,循環法更穩健。

常見錯誤避坑

  • 使用 int 導致溢出(n=9, a=9 時超過 231-1)
  • 字符串拼接轉換效率低且易出錯
  • 忽略輸入驗證導致未定義行為
  • 輸出格式不符合「s = 結果」規範
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved