今天遇見一道細節問題特別多的題,寫得我眼疼,題本身不難,難得是他的細節問題繁多,需要考慮的情況也甚多,稍有不慎就側漏了,哈哈。
題的思路也很清晰,就是將最後的結果的正負的符號分離出來,剩下的就是高精度的加減法了,利用字串處理即可,效率可以很高很高,有多高呢?自己感覺吧!
題:
給出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的起始和結束字元需要慎重...