日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

漫画:如何实现大整数相乘?(上)

發(fā)布時(shí)間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫画:如何实现大整数相乘?(上) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

戳藍(lán)字“CSDN云計(jì)算”關(guān)注我們哦!

前一段時(shí)間,小灰發(fā)布了一篇有關(guān)大整數(shù)相加的漫畫(huà),沒(méi)看過(guò)的小伙伴可以先看一看:

漫畫(huà):如何實(shí)現(xiàn)大整數(shù)相加?


那么,大整數(shù)相乘又是如何實(shí)現(xiàn)的呢?


起初,小灰認(rèn)為只要按照大整數(shù)相加的思路稍微做一下變形,就可以輕松實(shí)現(xiàn)大整數(shù)相乘。但是隨著深入的學(xué)習(xí),小灰才發(fā)現(xiàn)事情并沒(méi)有那么簡(jiǎn)單......





—————? 第二天? —————






怎樣列出這個(gè)乘法豎式呢?以 93281 X 2034 為例,豎式如下:




在程序中,我們可以利用int型數(shù)組,把兩個(gè)大整數(shù)按位進(jìn)行存儲(chǔ),再把數(shù)組中的元素像小學(xué)豎式那樣逐個(gè)進(jìn)行計(jì)算。


這個(gè)乘法豎式的計(jì)算過(guò)程可以大體分為兩步:

1.整數(shù)B的每一個(gè)數(shù)位和整數(shù)A所有數(shù)位依次相乘,得到中間結(jié)果。

2.所有中間結(jié)果相加,得到最終結(jié)果。



  • /**

  • * 大整數(shù)求乘積

  • * @param bigNumberA ?大整數(shù)A

  • * @param bigNumberB ?大整數(shù)B

  • */

  • public static String multiply(String bigNumberA, String bigNumberB) {

  • ? ?//1.把兩個(gè)大整數(shù)用數(shù)組逆序存儲(chǔ),數(shù)組長(zhǎng)度等于兩整數(shù)長(zhǎng)度之和

  • ? ?int lengthA = bigNumberA.length();

  • ? ?int lengthB = bigNumberB.length();

  • ? ?int[] arrayA = new int[lengthA];

  • ? ?for(int i=0; i< lengthA; i++){

  • ? ? ? ?arrayA[i] = bigNumberA.charAt(lengthA-1-i) - '0';

  • ? ?}

  • ? ?int[] arrayB = new int[lengthB];

  • ? ?for(int i=0; i< lengthB; i++){

  • ? ? ? ?arrayB[i] = bigNumberB.charAt(lengthB-1-i) - '0';

  • ? ?}

  • ? ?//2.構(gòu)建result數(shù)組,數(shù)組長(zhǎng)度等于兩整數(shù)長(zhǎng)度之和

  • ? ?int[] result = new int[lengthA+lengthB];

  • ? ?//3.嵌套循環(huán),整數(shù)B的每一位依次和整數(shù)A的所有數(shù)位相乘,并把結(jié)果累加

  • ? ?for(int i=0;i<lengthB;i++) {

  • ? ? ? ?for(int j=0;j<lengthA;j++) {

  • ? ? ? ? ? ?//整數(shù)B的某一位和整數(shù)A的某一位相乘

  • ? ? ? ? ? ?result[i+j] += arrayB[i]*arrayA[j];

  • ? ? ? ? ? ?//如果result某一位大于10,則進(jìn)位,進(jìn)位數(shù)量是該位除以10的商

  • ? ? ? ? ? ?if(result[i+j] >= 10){

  • ? ? ? ? ? ? ? ?result[i+j+1] += result[i+j]/10;

  • ? ? ? ? ? ? ? ?result[i+j] = result[i+j]%10;

  • ? ? ? ? ? ?}

  • ? ? ? ?}

  • ? ?}

  • ? ?//4.把result數(shù)組再次逆序并轉(zhuǎn)成String

  • ? ?StringBuilder sb = new StringBuilder();

  • ? ?//是否找到大整數(shù)的最高有效位

  • ? ?boolean findFirst = false;

  • ? ?for (int i = result.length - 1; i >= 0; i--) {

  • ? ? ? ?if(!findFirst){

  • ? ? ? ? ? ?if(result[i] == 0){

  • ? ? ? ? ? ? ? ?continue;

  • ? ? ? ? ? ?}

  • ? ? ? ? ? ?findFirst = true;

  • ? ? ? ?}

  • ? ? ? ?sb.append(result[i]);

  • ? ?}

  • ? ?return sb.toString();

  • }

  • public static void main(String[] args) {

  • ? ?String x = "3338429042340042304302404";

  • ? ?String y = "12303231";

  • ? ?System.out.println(multiply(x, y));

  • }





  • ————————————










    下面,我們的推導(dǎo)會(huì)有一些燒腦,請(qǐng)大家坐穩(wěn)扶好~~


    大整數(shù)從高位到低位,被平分成了兩部分。設(shè)整數(shù)1的高位部分是A,低位部分是B;整數(shù)2的高位部分是C,低位部分是D,那么有如下等式:



    如果把大整數(shù)的長(zhǎng)度抽象為n,那么:



    因此,整數(shù)1與整數(shù)2 的乘積可以寫(xiě)成下面的形式:



    如此一來(lái),原本長(zhǎng)度為n的大整數(shù)的1次乘積,被轉(zhuǎn)化成了長(zhǎng)度為n/2的大整數(shù)的4次乘積(AC,AD,BC,BD)。












    什么是master定理呢?


    master定理的英語(yǔ)名稱(chēng)是master theorem,它為許多由分治法得到的遞推關(guān)系式提供了漸進(jìn)時(shí)間復(fù)雜度分析。


    設(shè)常數(shù)a >= 1,b > 1,如果一個(gè)算法的整體計(jì)算規(guī)模 T(n)?=??a T(n / b) + f(n),那么則有如下規(guī)律:




    假設(shè)兩個(gè)長(zhǎng)度為n的大整數(shù)相乘,整體運(yùn)算規(guī)模是T(n) 。


    根據(jù)剛才得到的結(jié)論,兩個(gè)大整數(shù)相乘被拆分成四個(gè)較小的乘積:

    所以在第一次分治時(shí),T(n)和T(n/2)有如下關(guān)系:

    T(n) = 4T(n/2) + f(n)

    其中f(n)是4個(gè)乘積結(jié)果相加的運(yùn)算規(guī)模,f(n)的漸進(jìn)時(shí)間復(fù)雜度很明顯是O(n)


    把這個(gè)關(guān)系帶入到master定理的公式 T(n)?=??a T(n / b) + f(n) 當(dāng)中,

    此時(shí)?a=4, b=2


    此時(shí),把a(bǔ)和b的值,以及f(n)的時(shí)間復(fù)雜度帶入到master定理的第一個(gè)規(guī)律,也就是下面的規(guī)律:



    發(fā)現(xiàn)正好符合條件。


    怎么符合呢?推導(dǎo)過(guò)程如下:



    所以我們的平均時(shí)間復(fù)雜度是:







    —————END—————


    1.微信群:

    添加小編微信:color_ld,備注“進(jìn)群+姓名+公司職位”即可,加入【云計(jì)算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!


    2.征稿:

    投稿郵箱:liudan@csdn.net;微信號(hào):color_ld。請(qǐng)備注投稿+姓名+公司職位。


    推薦閱讀

    • 細(xì)數(shù)華為核心技術(shù)家底:華為真會(huì)被擊垮嗎?

    • 如何使用 Lucene 做網(wǎng)站高亮搜索功能?

    • 20張圖表達(dá)程序員的心酸

    • 一個(gè)程序員父親的呼吁:不要教你的孩子從小學(xué)編程!

    • Python | 7招教你識(shí)別一個(gè)網(wǎng)站是否是Django后臺(tái)

    • 月薪 50K 大牛整理!6 張 Python 圖譜,看完茅塞頓開(kāi)!


    程序人生公眾號(hào)是CSDN旗下有影響力的開(kāi)發(fā)者自媒體之一。這是一個(gè)以程序員日常工作和生活緊密相關(guān)且垂直服務(wù)于程序員群體的自媒體平臺(tái),掃描關(guān)注吧~


    ↓點(diǎn)擊“閱讀原文”,打開(kāi)APP 閱讀更順暢

    總結(jié)

    以上是生活随笔為你收集整理的漫画:如何实现大整数相乘?(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美一级不卡 | 日本爱爱免费视频 | 在线观看中文字幕一区二区 | 亲子乱一区二区三区 | 91性高潮久久久久久久久 | 亚洲天堂aaa | 久久在线精品视频 | 4444亚洲人成无码网在线观看 | 日韩av在线看免费观看 | 久人人 | 亚洲风情亚aⅴ在线发布 | 黄网站欧美内射 | 久久综合导航 | 亲切的金子餐桌片段的金子 | 在线aa | 久久中文字幕国产 | 亚欧洲精品视频在线观看 | 第一页在线 | av图区 | 欧美国产乱视频 | 91精品国产高清 | 日批视频网站 | 神马三级我不卡 | 美女视频一区二区 | 91视频a | 中文字幕在线观看播放 | 国产区高清 | 成人毛片在线视频 | 一区二区三区免费观看视频 | 日韩欧美天堂 | 欧美做受高潮1 | 欧美日韩中文在线 | 哈利波特3在线观看免费版英文版 | 韩日视频在线 | 欧美日韩亚洲在线观看 | 自拍偷拍在线视频 | 成人亚洲天堂 | 成人mv在线观看 | 国产伦精品一区二区三区照片 | 国产人妖一区二区三区 | 黄色网在线播放 | 国产一区h| 巨乳免费观看 | 欧美一级一级 | 青青草视频在线观看免费 | 日韩在线视频免费播放 | 国产精品久久午夜夜伦鲁鲁 | 日韩欧洲亚洲AV无码精品 | av综合站| 男女做爰猛烈刺激 | 国产精品嫩草久久久久 | 91婷婷射 | 欧美日本道 | 精品伊人 | 成人精品视频一区二区三区尤物 | 亚洲一区二区三区三州 | 欧美视频网址 | 欧美a天堂 | 蜜臀99久久精品久久久久久软件 | 国产一区二区三区播放 | 丝袜视频在线观看 | 一区二区三区在线免费播放 | 欧美成人乱码一二三四区免费 | 亚洲爱情岛论坛永久 | 国产精品成人国产乱一区 | 吻胸摸激情床激烈视频大胸 | 可以在线观看av的网站 | 欧美夜夜操| 日本在线精品 | 神马久久午夜 | 日韩短视频 | www一区| wwwav视频 | 亚洲av男人的天堂在线观看 | 国产精品女人久久久 | 嫩草影院菊竹影院 | 啪视频在线 | 成人短视频在线免费观看 | 人妻 丝袜美腿 中文字幕 | 国产精品国产成人国产三级 | 美女爱爱爱 | 午夜不卡福利视频 | 婷婷伊人综合中文字幕 | 一区二区三区网站 | 青娱乐超碰 | 四季av一区二区夜夜嗨 | 免费亚洲一区二区 | 97夜夜 | 国产精品久久久久久久久免费桃花 | 日韩av黄色片 | 色哟哟在线 | 曰批女人视频在线观看 | 国产三区av | 亚洲一区黄色 | 黄色在线视频观看 | 中文字幕在线视频免费播放 | 日韩精品久久一区 | 自拍偷拍第1页 | 受虐m奴xxx在线观看 |