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