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

九度 OJ 1198 高精度加法 - 大整數相加

     編輯:關於C++

問題描述

實現大整數加法,輸入兩個不超過 1000 位的非負整數,輸出其和。多組測試,EOF 結束。

模擬豎式加法

  1. 將字符串反轉,或從末尾向前遍歷。
  2. 逐位相加,處理進位。
  3. 結果反轉輸出。

代碼實現(C)

#include 
#include 

#define MAX 1005

int main() {
    char a[MAX], b[MAX], sum[MAX];
    while (scanf("%s%s", a, b) == 2) {
        int lenA = strlen(a), lenB = strlen(b);
        int len = lenA > lenB ? lenA : lenB;
        int carry = 0, idx = 0;
        for (int i = 0; i < len; i++) {
            int da = (i < lenA) ? a[lenA - 1 - i] - '0' : 0;
            int db = (i < lenB) ? b[lenB - 1 - i] - '0' : 0;
            int s = da + db + carry;
            sum[idx++] = '0' + (s % 10);
            carry = s / 10;
        }
        if (carry) sum[idx++] = '0' + carry;
        for (int i = idx - 1; i >= 0; i--) putchar(sum[i]);
        putchar('\n');
    }
    return 0;
}

關鍵點

  • 字符數組模擬大整數,避免溢出。
  • 從個位開始加,進位向高位傳遞。
  • 結果可能比兩數中最長者多 1 位(最高位進位)。
  • 輸入以 EOF 結束,使用 scanf("%s%s") == 2 判斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved