回覆列表
  • 1 # 使用者9292437617947

    高精度的本質就是用陣列存放一個數的各個數位。

    比如說int a[3]={3,2,1};就可以認為是儲存了一個數字123.為什麼要反過來呢?因為數字肯定是從個位開始的,但是你不一定知道最高位是多少。百位?千位?你不知道,所以要一個一個向下寫,從個位開始。

    那麼怎麼知道這個數字有多少位呢?很簡單,我在陣列下標為零的地方儲存就行了。這個時候陣列要開的大一點。

    比如int b[4]={3,0,1,2};就可以認為儲存了一個三位數210.初學者加上這個數字位數的儲存,沒問題的!

    怎麼樣輸出一個高精度數字呢?很簡單,一個迴圈,從最高位開始,到最低位結束,陣列遍歷一遍,數字一個一個打在螢幕上就行了。輸入也是同理,使用getchar()一個一個字元讀入,直到讀到了不是數字的字元停下來。

    這裡會湧現出一堆問題,比如說:

    字元怎麼轉換成數字?(char c=getchar();int a=c-‘0’;//即可)

    怎麼判斷停止?不一定所有題目都會告訴你數字位數的!(if(c>=‘0’ && c<=‘9’);//是數字)

    ......

    這些問題都可以

    現在假設你克服了所有困難,成功的輸入了兩個大數字到數組裡了。

    怎麼相加呢?很簡單,和豎式加法一樣。

    還是遍歷,從陣列的第一位(個位,下標為1)開始一直到最後,把兩個陣列的數字加起來,如果有進位,加上就行。

    具體來說,建立一個進位變數add,剛開始個位相加的時候是零,個位加起來以後如果有進位就給add賦值1,否則還是零;然後在十位相加的時候還要加上add,然後再看是否有進位,有進位就賦值1,沒有就是零,一直到最後,結果儲存在一個新的數組裡。

    最後,你得到了結果陣列。按位輸出就行了!

    這只是一個最簡單的高精度。以後的減法,乘法甚至除法,會更加複雜。你可能還要學結構體來更高效的處理這些大整數。加油吧!

  • 中秋節和大豐收的關聯?
  • 你給孩子用過智慧紙尿褲嗎?怎麼樣?