51nod - 1005
給出2個大整數a,b,計算a+b的結果。
input
第1行:大數a
第2行:大數b
(a,b的長度 <= 10000 需注意:a b有可能為負數)
output
輸出a + b
sample input
68932147586
468711654886
sample output
這個題的意思很簡單,如上所述,其實就是讓你寫兩個 用字串計算 正數加法和減法的函式,這兩個函式 的原理 和 大致的模型是一樣的 ,函式如下 ,大家可以對比一下這兩個函式,其實原理很簡單,就是將平時我們在演草紙上進行的加法運算或者劍法運算用字串的形式表示出來就行了,這裡需要注意一下一些細節: 加法中的進製和減法中的借位(自己起的名字,我也不太清楚叫什麼,嘿嘿)。**如下,這個**本來是可以再優化一下的, 但是我就得這個比較詳細,比較適合大家理解**所以就沒有進行優化,**雖然有點長,但是 其中兩個函式大概是一樣的,而且主函式就是分了幾種結果的型別,很好理解的喲!
#include
#include
#include
#include
using
namespace
std;
int cmp(char *a, char *b)// 比較 連個數字字串所對應的數字的大小
void add(char *a, char *b)
if(pb+1 != b)
*(p+i) = (m + n + c) % 10 + 48;//將結果轉化為字串進行儲存
c = (m + n + c) / 10;
}if(c > 0) // 表示最後一位還有進製
else
*(p+i) = '\0';
int p_len = strlen(p);
int flag = 0;
for(int j = p_len - 1; j >= 0; j--)
if(p_len == 1 && p[0] == '0')
printf("0");
cout
if(pb + 1 != b)
m -= c;
if(m < n) m += 10, c = 1;
else c = 0;
*(p+i) = m - n + 48;
}*(p+i) = '\0';
int p_len = strlen(p);
int flag = 0;
for(int j = p_len - 1; j >= 0; j--)
cout
else
if(a[0] != '-' && b[0] == '-')
else
if(cmp(a, b+1) > 0)
sub(a, b+1);
else
printf("0\n");
}else
if(a[0] == '-' && b[0] != '-')
else
if(cmp(b, a+1) > 0)
sub(b, a+1);
else
printf("0\n");
}return
0;}
大整數演算法(加減法)
現將兩個數分別計算出長度,然後用將長度較短的數為界,寫乙個for迴圈,將兩個數從末往前依次相加。這個迴圈結束後,將長度較大的陣列未計入計算的數進行運算 include includeint main 將陣列初始化為0 int l1,l2 l1 strlen a l2 strlen b if l1 l...
大整數類 實現加減法
上次寫了乙個 無符號大整數加法 是比較容易的,這次實現了完整的大整數的加減法,支援有符號的!不過實現起來感覺不是很順暢,感覺可以優化的地方還很多,先貼一下 日後再來優化。另,思路主要是模擬手算的過程,計算方式在注釋裡有說清楚。biginteger.h ifndef big integer h def...
大整數(高精度)加減法
第一次寫,涉及大整數加減運算 先來看看加法,主要思想是逐位相加,進製加1 include include using namespace std void add int a,int b string str1,string str2 void print int a 輸出控制,多餘的0不要輸出 i...