大整數運算

2022-01-19 23:43:47 字數 1198 閱讀 3809

如果遇到1000位的加減,只能通過模擬來確定精度

定義int 型陣列儲存大整數。

原則:整數的高位儲存在陣列的高位,整數的低位儲存在陣列的低位,因為在進行運算的時候都是從整數的低位到高位進行列舉,順位儲存和這種思維相吻合。

因此實際上是逆位儲存,再度入後需要在另存為陣列的時候反轉。

定義結構體並初始化

struct

bign

};

將從右往左的不符合閱讀習慣的倒序陣列轉化為從左往右的正序陣列

bign change(char

str)

return0;

}

如何比較這兩個大整數

先比較位數,如果位數不同直接比較誰大,如果位數相同,則從高位開始迴圈比較

int

compare(bign a,bign b)

else

if(a.lenelse

else

if(a.d[i]}

}return0;

}

兩個大整數相加:從低位開始每位相加,然後進製儲存在乙個臨時int中,每次每位相加需要把臨時int加上

bign add(bign a,bign b)

if(carry!=0

)

return0;

}

兩個大整數相減:低位向高位借位,並且最高一位如果為0則抹去

big sub(bign a,bign b)

c.d[c.len++]=a.d[i]-b.d[i];

}while(c.len-1>=1&&c.d[c.len-1]==0

)

return

c;}

高精度與低精度的乘法,即乙個數為bign乙個數字int

bign multi(bign a,int

b)

while(carry!=0)

return

c;}

高精度與低精度的除法,r位餘數

bign divide(bign a,int b,int&r)

else

}while(c.len-1>=1&&c.d[c.len-1]==0

)

return

c;}

超長整數運算(大整數運算)

問題描述 將形如1234567890123456789不能儲存在long變數中的數稱為超長整數或大整數。現討論大整數的加減乘除運算。思想方法 用陣列儲存超長整數,且為處理的簡單起見約定每個元素存放相同位的數字。如 每個元素存放4位。1 加法運算 void add int a,int b,int c ...

大整數運算

包括大整數的四則運算,一般都是用陣列來模擬大整數的,如果是每一位陣列只存一位數的話,空間浪費比較嚴重,所以這裡每一位陣列儲存4位數,所以是10000進製。加法 輸入 不超過兩百位的非負整數,可能有多餘的前導零。輸出 相加後的結果,不能有多餘的前導零 首先是一些基本的常量定義 define bir 1...

大整數運算

大整數加法 實現 include include intmain c lenc x while c lenc 0 lenc 1 lenc for int i lenc i 1 i printf d c i return0 大整數減法 實現 include include intmain b 205 ...