99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀python里大整數(shù)相乘相關(guān)技巧指南
python里大整數(shù)相乘相關(guān)技巧指南
2017-08-14
收藏

python里大整數(shù)相乘相關(guān)技巧指南

對(duì)于大整數(shù)計(jì)算,一般都要用某種方法轉(zhuǎn)化,否則會(huì)溢出。但是python無(wú)此擔(dān)憂了。Python支持“無(wú)限精度”的整數(shù),一般情況下不用考慮整數(shù)溢出的問(wèn)題,而且Python Int類型與任意精度的Long整數(shù)類可以無(wú)縫轉(zhuǎn)換,超過(guò)Int 范圍的情況都將轉(zhuǎn)換成Long類型。

問(wèn)題

大整數(shù)相乘

思路說(shuō)明

對(duì)于大整數(shù)計(jì)算,一般都要用某種方法轉(zhuǎn)化,否則會(huì)溢出。但是python無(wú)此擔(dān)憂了。

Python支持“無(wú)限精度”的整數(shù),一般情況下不用考慮整數(shù)溢出的問(wèn)題,而且Python Int類型與任意精度的Long整數(shù)類可以無(wú)縫轉(zhuǎn)換,超過(guò)Int 范圍的情況都將轉(zhuǎn)換成Long類型。

例如:


注意:前面的“無(wú)限精度”是有引號(hào)的。事實(shí)上也是有限制的,對(duì)于32位的機(jī)器,其上限是:2^32-1。真的足夠大了。

為什么Python能夠做到呢?請(qǐng)有興趣刨根問(wèn)底的去看Python的有關(guān)源碼。本文不贅述。

在其它語(yǔ)言中,通常用“分治法”解決大整數(shù)相乘問(wèn)題。

但是,這里提供一個(gè)非常有意思的計(jì)算兩個(gè)整數(shù)相乘的方法,算是做為大整數(shù)相乘的演示。

兩個(gè)整數(shù)相乘:阿拉伯乘法。


#!/usr/bin/env python
#coding:utf-8
 
#阿拉伯乘法
defarabic_multiplication(num1,num2):
  num_lst1=[int(i)foriinstr(num1)]#將int類型的123,轉(zhuǎn)化為list類型的[1,2,3],每個(gè)元素都是int類型
  num_lst2=[int(i)foriinstr(num2)]
 
  #兩個(gè)list中整數(shù)兩兩相乘
  int_martix=[[i*jforiinnum_lst1]forjinnum_lst2]
 
  #將上述元素為數(shù)字的list轉(zhuǎn)化為元素類型是str,主要是將9-->'09'
  str_martix=[map(convert_to_str,int_martix[i])foriinrange(len(int_martix))]
 
  #將上述各個(gè)list中的兩位數(shù)字分開(kāi):['01','29','03']-->[0,2,0],[1,9,3]
  martix=[[int(str_martix[i][j][z])forjinrange(len(str_martix[i]))]foriinrange(len(str_martix))forzinrange(2)]
 
  #計(jì)算阿拉伯乘法表的左側(cè)開(kāi)始各項(xiàng)和
  sum_left=summ_left(martix)
 
  #計(jì)算阿拉伯乘法表的底部開(kāi)始各項(xiàng)和
  sum_end=summ_end(martix)
 
  #將上述兩個(gè)結(jié)果合并后翻轉(zhuǎn)
  sum_left.extend(sum_end)
  sum_left.reverse()
 
  #取得各個(gè)和的個(gè)位的數(shù)字(如果進(jìn)位則加上)
  result=take_digit(sum_left)
 
  #翻轉(zhuǎn)結(jié)果并合并為一個(gè)結(jié)果字符串?dāng)?shù)值
  result.reverse()
  int_result="".join(result)
  print"%d*%d="%(num1,num2)
  printint_result
 
#將int類型轉(zhuǎn)化為str類型,9-->'09'
 
defconvert_to_str(num):
  ifnum<10:
    return"0"+str(num)
  else:
    returnstr(num)
 
#計(jì)算阿拉伯乘法表格左側(cè)開(kāi)始的各項(xiàng)之和
 
defsumm_left(lst):
  summ=[]
  x=[iforiinrange(len(lst))]
  y=[jforjinrange(len(lst[0]))]
  sx=[iforiinxifi%2==0]
  foriinsx:
    s=0
    j=0
    whilei>=0andj<=y[-1]:
      s=s+lst[i][j]
      ifi%2==1:
        j=j+1
      else:
        j=j
      i=i-1
    summ.append(s)
  returnsumm
 
#計(jì)算阿拉伯乘法表格底部開(kāi)始的各項(xiàng)之和
 
defsumm_end(lst):
  summ=[]
  y=[jforjinrange(len(lst[0]))]
  ex=len(lst)-1
  forminrange(len(y)):
    s=0
    i=ex
    j=m
    whilei>=0andj<=y[-1]:
      s=s+lst[i][j]
      ifi%2==1:
        j=j+1
      else:
        j=j
      i=i-1
    summ.append(s)
 
  returnsumm
 
#得到各個(gè)元素的個(gè)位數(shù),如果是大于10則向下一個(gè)進(jìn)位
 
deftake_digit(lst):
  tmp=0
  digit_list=[]
  forminrange(len(lst)):
    lstm=0
    lstm=lst[m]+tmp
    iflstm<10:
      tmp=0
      digit_list.append(str(lstm))
    else:
      tmp=lstm/10
      mm=lstm-tmp*10
      digit_list.append(str(mm))
  returndigit_list
 
if__name__=="__main__":
  arabic_multiplication(469,37)



數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }