專案要點
1.大數指的是遠超long long int的資料
2.將大數用矩陣進行儲存,並通過矩陣實現運算
3.本人採用字串進行儲存,應注意char的特點
比如:char a=161;
cout<
此時會輸出-95,而不是161,char型別首個位元位是作為正負號的
模冪快速演算法
a,m為正整數,將m表示為二進位制形式則可得
舉個例子
**中有之前的減法 乘法 取模 除法運算
可得以下快速指數演算法以及執行截圖
#include
#include
#include
#include
using namespace std;
#define n 10
string dezero(string a)//用來去掉正數前面的0,也就是說可以輸入000001類似這樣的數字
if(i==a.length()) return "0";
a.erase(0,i);
return a;
}int judge(string a,string b)//判斷兩個正數的大小
if(judge(a,b)==-1)
reverse(c1.begin(),c1.end());
reverse(c2.begin(),c2.end());
for(i=0;i=48&&c2.at(i)<=57) c2.at(i)-=48;
if(c2.at(i)>=97&&c2.at(i)<=122) c2.at(i)-=87;
} for(i=0;i=48&&c1.at(i)<=57) c1.at(i)-=48;
if(c1.at(i)>=97&&c1.at(i)<=122) c1.at(i)-=87;
} for(i=0;i=0;i--)
c1.erase(i+1,c1.length());
for(i=0;i=10) c1.at(i)+=87;
if(c1.at(i)<10) c1.at(i)+=48;
} reverse(c1.begin(),c1.end());
if(j==-1) c1.insert(0,d);
return c1;
}string multiply(string a,string b)//整數
if(b.at(0)=='-')
a=dezero(a);
b=dezero(b);
if(a.at(0)==48||b.at(0)==48) return "0";
if(a.length()>b.length())
else
reverse(c1.begin(),c1.end());
reverse(c2.begin(),c2.end());
for(i=0;i=48&&c2.at(i)<=57) c2.at(i)-=48;
if(c2.at(i)>=97&&c2.at(i)<=122) c2.at(i)-=87;
} for(i=0;i=48&&c1.at(i)<=57) c1.at(i)-=48
if(c1.at(i)>=97&&c1.at(i)<=122) c1.at(i)-=87;
} for(i=0;i=n)
else
}} }
for(i=c3.length()-1;i>=0;i--)
c3.erase(i+1,c3.length());
for(i=0;i=10) c3.at(i)+=87;
if(c3.at(i)<10) c3.at(i)+=48;
} reverse(c3.begin(),c3.end());
if(yao==1) c3="-"+c3;
return c3;
}string mod(string a,string b)
c1=dezero(a);
c2=dezero(b);
d="";
for(i=0;i=0) }
if(j==1) d=minus(b,d);
return dezero(d);
}string divide(string a,string b)//正整數除法
c1=dezero(a);
c2=dezero(b);
d="";
e="";
for(i=0;i=0)
e=e+"0";
e.at(i)=j;
} for(i=0;i=10) e.at(i)+=87;
if(e.at(i)<10) e.at(i)+=48;
} e=dezero(e);
return e;
}string quickpower(string a,string b,string c)//快速指數演算法a的b程式設計客棧次方mod c
reverse(e.begin(),e.end());
//快速指數演算法
b=e;
stri d="1";
for(i=0;i>a>>b>>c)
{ cout<
本文標題: c++使用string的大數快速模冪運算(6)
本文位址:
快速冪 大數取模
首先要知道取餘的公式 a b p a p b p p。那麼冪不就是乘機的累積嗎,由此給出 int fast int a,int b,int p return int t p 順便把大數取模也給出吧,它的原理就是這個取餘公式 a b p a p b p p 那麼大數可以看做每一位的那位數字乘以自身的權...
快速冪 大數乘法取模
求冪的優化 快速冪 大數相乘取模 快速大數冪 快速冪 在的標頭檔案中自帶的pow 函式在呼叫時需要一系列型別轉換,所以數值並不是很嚴格精確,存在誤差,執行效率低,最好不要用,最好自己編寫。ll mypow ll x,ll n,ll mod return res 大數乘法取模 在計算 x x mod ...
C 快速冪與大數取模演算法示例
一 快速冪 其實就是求 a b p,其中a,b,p都比較大在int範圍內 這類問www.cppcns.com題。首先要知道取餘的公式 a b p a p b p p。那麼冪不就是乘機的累積嗎,由此給出 int fast int a,int b,int p return int t p 二 大數取模 ...