回覆列表
  • 1 # 使用者2033590184843

    先回答你的第一個問題。高精度的本質就是用陣列存放一個數的各個數位。比如說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,沒有就是零,一直到最後,結果儲存在一個新的數組裡。最後,你得到了結果陣列。按位輸出就行了!這只是一個最簡單的高精度。以後的減法,乘法甚至除法,會更加複雜。你可能還要學結構體來更高效的處理這些大整數。加油吧!

  • 中秋節和大豐收的關聯?
  • 古詩詞比賽的題目?