51Nod 1005 大數加法

2021-07-30 23:26:28 字數 1901 閱讀 3572

兩個超長帶符號數字相加這道題,是51nod的第一題。雖然簡單,其關鍵在於完整的考慮各種邊界情況:

1.加法進製後可能會造成多出一位的情況;

2.減法借位後可能導致前n個值都為0,需要剔除;

3.由於按位加減法時是將數字反序進行排列的,剔除0時需要(反序的反序)來進行。

4.range的起始和結束字元需要慎重考慮

5.int和str的型別轉換

#coding:utf-8

def rev(a):

if a[0]=='-':

flag='-'

return a[1:],flag

else:

flag=''

return a,flag

def bigadd_sub(a,b): #大數加法

alist = list(a[::-1])

blist = list(b[::-1])

for j in range(0,len(alist)):

if (j=10:

if j==len(alist)-1:

else:alist[j+1] =int(alist[j+1])+1

alist[j] = alist[j] - 10

c=''.join(str(s) for s in alist)

return c

def bigsubstract_sub(a,b): #大數減法

alist = list(a[::-1])

blist = list(b[::-1])

for j in range(0,len(alist)):

if (jlength2:

return 1;

elif length2>length1:

return 2;

else:

for i in range(0,length1):

if a[i]>b[i]:

return 1;

elif b[i]>a[i]:

return 2

else:

continue

return 1

def bigadd(num1,num2): #真實呼叫的主體函式。

revnum1, flag1 = rev(num1)

revnum2, flag2 = rev(num2)

tag = comparebig(revnum1, revnum2)

marktag=markcompare(flag1, flag2)

if (marktag==true and tag==1):

sumtemp=bigadd_sub(revnum1,revnum2)

return flag1+sumtemp[::-1]

elif (marktag==true and tag==2):

sumtemp=bigadd_sub(revnum2,revnum1)

return flag2+sumtemp[::-1]

elif (marktag==false and tag==1):

sumtemp=bigsubstract_sub(revnum1,revnum2)

return flag1+sumtemp[::-1]

else:

sumtemp = bigsubstract_sub(revnum2, revnum1)

return flag2 + sumtemp[::-1]

num1 = input()

num2 = input()

ans=bigadd(num1,num2)

print(ans)

說明:型別轉換需要大量的時間。如果進一步優化時間,則應當考慮使用純字串格式進行計算(即利用0-9的ascii碼格式進行計算)

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