51nod 1005 大數加法

2021-07-25 01:33:58 字數 1448 閱讀 1171

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

input

第1行:大數a

第2行:大數b

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

output

輸出a + b
input示例

68932147586

468711654886

output示例

537643802472
純粹的模擬,主要分一下幾種情況:

首先判斷兩個大數是否同號,同號則相加;否則,相減。相減又分為三大種情況:len1的長度大於len2,直接num1-num2;len1小於len2時,num2-num1即可;

長度相等時,通過迴圈判斷大小,並做標記;

#include #include #include #include #define m 10005

using namespace std;

char s1[m],s2[m];

int num1[m],num2[m];

int main()

if(s2[0] == '-' || s2[0] == '+')

for(i = len1-1,x = 0;i >= 0 && (s1[i] != '-' && s1[i] != '+') ;i --)

num1[x++] = s1[i] - '0';

for(i = len2-1,x = 0;i >= 0 && (s2[i] != '-' && s2[i] != '+');i --)

num2[x++] = s2[i] - '0';

if(ch1 != ch2)

num1[i] -= num2[i];}}

else if(j > k)

num1[i] = num2[i] - num1[i];}}

else

else if(num1[i] < num2[i])

}if(flag)

num1[i] -= num2[i]; }}

else

num1[i] = num2[i] - num1[i]; }}

}} else

} if((ch1 == '-' && k > j) || (ch2 == '-' && k < j ) || (ch1 == '-' && ch2 == '-') || (ch1 == '-' && flag) || (ch2 == '-' && y))

printf("-");

flag = 0;

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

if(!flag)

printf("0");

putchar('\n'); }

return 0;

}

51Nod 1005 大數加法

今天遇見一道細節問題特別多的題,寫得我眼疼,題本身不難,難得是他的細節問題繁多,需要考慮的情況也甚多,稍有不慎就側漏了,哈哈。題的思路也很清晰,就是將最後的結果的正負的符號分離出來,剩下的就是高精度的加減法了,利用字串處理即可,效率可以很高很高,有多高呢?自己感覺吧!題 給出2個大整數a,b,計算a...

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的起始和結束字元需要慎重...