codevs3115 高精度練習之加法
阿新 • • 發佈:2019-02-08
3115 高精度練習之加法
時間限制: 1 s 空間限制: 64000 KB 題目等級 : 黃金 Gold 題目描述 Description給出兩個正整數A和B,計算A+B的值。保證A和B的位數不超過500位。
輸入描述 Input Description讀入兩個用空格隔開的正整數
輸出描述 Output Description輸出A-B的值
樣例輸入 Sample Input3 12
樣例輸出 Sample Output15
資料範圍及提示 Data Size & Hint兩個正整數的位數不超過500位
實際就是對陣列的處理,倒置對應位相加。最後用歸併排序的思想進行處理。(注意最後要將結果倒置回來,而且要注意進位) AC程式碼
#include <stdio.h> #include <string.h> char a[1001]; char b[1001]; char c[1001]; void swap(char target[]) { int i; int j; char temp; for(i = 0,j = strlen(target) - 1;i <= j;i++,j--) { temp = target[i]; target[i] = target[j]; target[j] = temp; } } void add(char a[],char b[]) { int i; for(i = 0;i < strlen(a) && i < strlen(b);i++) { c[i] += a[i] + b[i] - '0'; if(c[i] - '0' >= 10){ c[i] = c[i] - 10; c[i+1] = 1; } } //先將對其的進行運算 if(strlen(a) == strlen(b)) { if(c[i] == 1) c[i]='1'; } //長度相等,看是否進一位 if(strlen(a) > strlen(b)){ if(c[i] == 1) {//進位的話就得每位進行累加 for(;i < strlen(a);i++){ c[i] += a[i]; if(c[i] - '0' >= 10) { c[i] = c[i] - 10; c[i+1] = 1; } } if(c[i-1] == '0')//最後一位進位 c[i] = '1'; } else { //不進位的話就直接把陣列接在後面 for(;i < strlen(a);i++) c[i] = a[i]; } } if(strlen(b) > strlen(a)){ if(c[i]==1){ for(;i < strlen(b);i++){ c[i] += b[i]; if(c[i] - '0' >= 10){ c[i] = c[i] - 10; c[i+1] = 1; } } if(c[i] == 1) c[i] = '1'; } else { for(;i < strlen(b);i++) c[i] = b[i]; } } } int main(void) { scanf("%s",a); scanf("%s",b); swap(a); swap(b); add(a,b); swap(c); printf("%s\n",c); return 0; }