51Nod 1005 大數加法

2021-07-11 05:14:42 字數 1906 閱讀 4298

今天遇見一道細節問題特別多的題,寫得我眼疼,題本身不難,難得是他的細節問題繁多,需要考慮的情況也甚多,稍有不慎就側漏了,哈哈。

題的思路也很清晰,就是將最後的結果的正負的符號分離出來,剩下的就是高精度的加減法了,利用字串處理即可,效率可以很高很高,有多高呢?自己感覺吧!

題:

給出2個大整數a,b,計算a+b的結果。

input

第1行:大數a

第2行:大數b

(a,b的長度 <= 10000 需注意:a b有可能為負數)

output

輸出a + b

input示例

68932147586

468711654886

output示例

537643802472

題寥寥數行,看著很簡單,其實思路真的很簡單,但是我這粗心鬼,整整做了乙個小時,因為自己粗心,總是忽略了很多的細節問題,頻頻出錯,好在最後都改正了過來,**如下。

**c:

#include 

#include

#define _max 10005

int product[_max] = ;

char numone[_max] = , numtwo[_max] = ;

char numoneup[_max] = , numtwoup[_max] = ; //倒序儲存位置

int absmax = 1;

//遞迴進製函式

void carrying(int tag, int i, int *p)

return ;

}//遞迴退位函式

void abdicate(int tag, int i, int *p)

return ;

}//判斷大小

void size(int numonelen, int numtwolen)

return ;

}if (numonelen == numtwolen)

return ;

}else

if (numoneup[i] > numtwoup[i])}}

return ;

}//加減處理

void addorsub(int numonelen, int numtwolen, int flag) //flag加法為1減法為0

if (numone[0] != '-')

key = 0;

for (i = numtwolen; i > 0; i--)

if (numtwo[0] != '-')

numlenmax = numonelen > numtwolen ? numonelen : numtwolen;

numlenmin = numonelen < numtwolen ? numonelen : numtwolen;

//逐位相加

if (flag)

for (i = 0; i < numlenmin; i++)

}//逐位相減

else

for (i = 0; i < numlenmin; i++)

}}//輸出結果

void print()

}for (j = i; j >= 0; j--)

printf("\n");

}int main(int argc, const

char * argv)

else

if (numone[0] == '-' || numtwo[0] == '-')

print();

}else

return

0;}

也就這樣吧,這道題鍛鍊的是個人的程式設計基本功底和粗心程度!有點意思-_-#over!!!

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...

51Nod 1005 大數加法

兩個超長帶符號數字相加這道題,是51nod的第一題。雖然簡單,其關鍵在於完整的考慮各種邊界情況 1.加法進製後可能會造成多出一位的情況 2.減法借位後可能導致前n個值都為0,需要剔除 3.由於按位加減法時是將數字反序進行排列的,剔除0時需要 反序的反序 來進行。4.range的起始和結束字元需要慎重...