2大整數相加,每位是小寫字母,』a』是0,『z』是25。求加法的和
輸入
z
bc
輸出cb
解法: 思路:
ord():返回對應的 ascii 數值
reverse():反向列表裡的元素
chr():將as碼轉成字元
26進製加法的過程 :
從末尾開始,按位將兩數相加,如果和超過26,就需要進製,將和減去26的結果就是該位的結果。
進製要留到下一位的計算裡。
可以看到這是乙個遞迴的過程。因為上乙個進製要留到下乙個位相加裡。
所以首先,要滿足按位加,要將兩個字串補充成乙個長度。
十進位制我們是補0,這裡是26進製,我們補』a』。
設定函式來計算按位加的過程,輸入的兩位的字元,輸出是相加的結果和進製。這裡用ord將字串轉成ascii碼再模擬計算的過程。
然後對兩個補完長度的字串,進行按位加,將每乙個按位加的結果存在list裡, 最後將list的結果反向,並聯合起來輸出字串,就是相加的結果。
# #以下只用於測試,輸出應該是saeat***srdssvtady
# input1 = 'tttzzzasasazzz'
# input2 = 'sadzzzsdssdasdsadz'
#該函式描述了 按位加的26進製加法,輸入是兩個位的字元,輸出是 加完的結果 和 進製
def bitadd(bit1,bit2,next):
#求出a的asc碼,把bit1,bit2轉成asc碼減去a碼的值就能得到26進製裡該字元代表的數
#例如 b應該是1,和a的asc碼正好相差1。
asclow = ord('a')
asc1=ord(bit1)-asclow
asc2=ord(bit2)-asclow
#按位相加後,注意一定還要加進制 ,總和超過26則需要進製1,否則進製0
result_bit=asc1 + asc2 +next
temp=result_bit-26
if(temp>=0):
#進製為1
next=1
#result_bit的結果等於兩位之和與26相減後剩下的值
result_bit=temp
else:
next=0
#result_bit不變
#輸出結果是26以內的數,要把它轉成字元的asc碼,一定要記得加'a'的asc碼值
return result_bit+asclow,next
input1=str(input())
input2=str(input())
#首先按長度,將兩個數補成位數相同的長度,注意高位用'a'來當0來補全。
len1=len(input1)
len2=len(input2)
if(len1>len2):
input2='a'
*(len1-len2)+input2
maxlen=len1
else:
input1='a'
*(len2-len1)+input1
maxlen = len2
#初始化進製的值
next=0
#list用來裝按位相加留下的結果
rlist=
for i in range(maxlen-1,-1,-1):
result_bit, next=bitadd(input1[i],input2[i],next)
#把按位加的數字結果轉成字元表示,chr(ascii碼)
#注意,運算到最後一位相加時,如果進製值是1,則要額外新增一位數字1,1對應的字元是b。
if(next==1):
#注意rlist裡裝的字元順序是倒序,所以要翻轉後再輸出字串
rlist.reverse()
print(''.join(rlist))
華為2019校招筆試
示例2 示例 常用的邏輯運算有and 表示為 or 表示為 not 表示為 他們的邏輯是 1 1 1 1 0 0 0 1 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1 0其中,他們的優先關係為 not and or 例如 a b c 實際是 a b c a b c d ...
華為2023年4月10日春招筆試題解
給定乙個字串,字串包含數字 大小寫字母以及括號 包括大括號 中括號和小括號 括號可以巢狀,即括號裡面可以出現數字和括號。按照如下的規則對字串進行展開,不需要考慮括號成對不匹配問題,用例保證括號匹配,同時用例保證每個數字後面都有括號,不用考慮數字後面沒有括號的這種情況,即2a2 b 這種情況不用考慮。...
水水微軟蘇州校招筆試 1月17日 題解
a.koch snowflake 找規律.觀察k2,k3可以得出在每個ki中mod 4為2,3的將是當前最新出來的顏色,所以只需要不斷的往前迭代直到當前標號迭代後所對應標號是某個ki中mod 4為2,3的.include include include include include include...