給出2個大整數a,b,計算a+b的結果。
input
第1行:大數aoutput第2行:大數b
(a,b的長度 <= 10000 需注意:a b有可能為負數)
輸出a + binput示例
68932147586output示例468711654886
537643802472
沒有一發tle,ac了,好開心~~
分析:思路還是很清晰的,就是**寫的有點長,可以改進,改進需要注意的點太多,遂放棄、、
分為兩種情況,s1,s2同號或者異號,兩種情況都要對s1,s2進行處理,進行移位操作,末位存在max_n-1位置,(去掉負號後的)首位存在v,方便計算。s1,s2同號時很好計算啦,異號時,交換s1,s2,使得s1總為正的,再對s1,s2相對絕對值的大小進行討論即可!
#include#include#include#includeusing namespace std;
const int max_n=11000;
bool f1=0,f2=0;//f1,f2分別記錄了s1,s2的正負
int len1,len2,v1=max_n,v2=max_n;//v1,v2記錄了s1,s2首位的位置(去掉負號後的)
char s1[max_n],s2[max_n];
void add()
for(int i=len2-1;i>=1;i--)
int v=min(v1,v2);
for(int i=max_n-1;i>=v;i--)
}if(s1[v-1]=='1')v--;//進製處理
printf("-");
for(int i=v;i=0;i--)
for(int i=len2-1;i>=0;i--)
int v=min(v1,v2);
for(int i=max_n-1;i>=v;i--)
}if(s1[v-1]=='1')v--;//進製處理
for(int i=v;i=len2)f=1;
else if(len1s2[i+1])
if(s1[i]=0;i--)
for(int i=len2-1;i>=1;i--)
int v=min(v1,v2);
for(int i=max_n-1;i>=v;i--)
}while(s1[v]=='0')v++;//退位處理
for(int i=v;i=0;i--)
for(int i=len2-1;i>=1;i--)
int v=min(v1,v2);
for(int i=max_n-1;i>=v;i--)
}while(s2[v]=='0')v++;//退位處理
printf("-");
for(int i=v;i
51Nod 1005 大數加法
今天遇見一道細節問題特別多的題,寫得我眼疼,題本身不難,難得是他的細節問題繁多,需要考慮的情況也甚多,稍有不慎就側漏了,哈哈。題的思路也很清晰,就是將最後的結果的正負的符號分離出來,剩下的就是高精度的加減法了,利用字串處理即可,效率可以很高很高,有多高呢?自己感覺吧!題 給出2個大整數a,b,計算a...
51nod 1005 大數加法
給出2個大整數a,b,計算a b的結果。input 第1行 大數a 第2行 大數b a,b的長度 10000 需注意 a b有可能為負數 output 輸出a binput示例 68932147586 468711654886output示例 537643802472純粹的模擬,主要分一下幾種情況 ...
51nod 1005 大數加法
1005 大數加法 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出2個大整數a,b,計算a b的結果。input 第1行 大數a 第2行 大數b a,b的長度 10000 需注意 a b有可能為負數 output 輸出a binput示例 68932147586 4...