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