一、 vs平台
利用c語言對大數運算中的模加減運算進行了編碼。
二、編碼思想
條件:大數a 大數b 模p 結果r
1
、加法
首先,判斷a、b這兩個大數是否小於模p。
如果a和b都小於模p,則:
若a+b>p,r=a+b-p;若a+b
如果a和b其中有乙個大於模p或者都大於模p,先將a或b減去p,直到a和b都小於模p為止,a1=(a-p)2、減法
首先,判斷a、b這兩個大數是否小於模p。
如果a和b都小於模p,則:
若a[i] > b[i],則 r = a[i] - b[i];
若a[i] < b[i],則 r = a[i] - b[i] + p[i]
如果a和b其中有乙個大於模p或者都大於模p,先將a或b減去p,直到a和b都小於模p為止,a1=(a-p)若a1[i] > b1[i],則 r = a1[i] – b1[i];
若a1[i] < b1[i],則 r = a1[i] – b1[i] + p[i]
注:並且存在加法就會有進製,存在減法就會有借位。
a b < p
若 a+b>p 則 r = a+b-p;
若a+b則 r = a+b;
a b > p
先a1 = (a-p)
則:r = a1 + b1;
a b < p
若a>b r=a-b
若aa b > p
先a1=(a-p)
若a1>b1 r=a-b
若a1三、**說明
void format_conversion(sint32 *current_datat, sint32*objective_data);
該函式是乙個大小端轉換的乙個函式。
uint32 numerical_transformation(sint32 *num_a, sint32*num_p, sint32 *num_b);
該函式為將a與p進行比較,如果a>p,則進行a-p,直到a
uint32 module_add_sub(sint32 *add_sub_a, sint32 *add_sub_b,sint32 *add_sub_p, uint32 mode, sint32 *add_sub_c);
該函式這是主體函式進行大數模加減運算。
大數加減乘除及模運算
自己寫的 測試了幾組測試樣例,都沒什麼問題,如下 define crt secure no deprecate include include include includeusing namespace std const int maxn 3000000 80 const int m 20000...
大數運算 支援加減乘運算
本程式僅為演示,僅供參考,沒有考慮負數情況。優點 1 支援任意數量的數字,直到記憶體不足 2 c 運算子過載,方便使用。不足 1 沒有實現除法運算 1 pragma once 2 include 3 include 4 include 56 using namespace std 78 class ...
大數取模運算
問題分析 1 大數儲存 由於x的位數最大為400位,我們不能用現有的int,long,long long,double等資料型別進行儲存。一般儲存大數的方法是用乙個字串來表示。2 取模運算 模擬手算豎式的方法。用x從高到低的每一位加上前一位餘數 10來對bi進行 最後得到的結果就是x bi的結果。利...