介绍
这篇文章给大家介绍怎么在c++中利用字符串实现幂运算,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
项目要点
1。大数指的是远超长长的int的数据
2。将大数用矩阵进行存储,并通过矩阵实现运算
3。本人采用字符串进行存储,应注意char的特点
比如:char=161;
,,,,, cout<& lt; (int);
此时会输出-95年,而不是161字符类型首个比特位是作为正负号的
模幂快速算法
a, m为正整数,将米表示为二进制形式
则
可得
举个例子
代码中有之前的减法乘法取模除法运算,
可得以下快速指数算法以及运行截图
# include# include # include # include using namespace 性传播疾病; # define n 10 string dezero (string )//用来去掉正数前面的0,也就是说可以输入000001类似这样的数字 { ,long int 我; ,(i=0; i< a.length();我+ +) ,{ ,如果(a.at (i)在48),打破; ,} ,如果(我==a.length ()), return “0”; ,a.erase (0, 1); ,return ; } int 法官(string string b)//判断两个正数的大小 { ,如果(a.length()在b.length ()), return 1; ,如果(a.length () & lt; b.length ()), return 1; ,long int 我; ,(i=0; i< a.length();我+ +) ,{ ,如果(a.at (i)在在(我)),return 1; ,如果(a.at(我)& lt;在(我)),return 1; ,} ,return 0; } string - (string string b)//自然数减法 { ,=dezero (); ,b=dezero (b); ,long int i, j=0; ,string c=?”; ,string c1, c2; ,string d=安澄?; ,如果(法官(a, b)==0), return c; ,如果法官(a, b)==1) ,{ ,c1=一个; ,c2=b; ,} ,如果法官(a, b)==1) ,{ ,c1=b; ,c2=一个; ,j=1; ,} ,反向(c1.begin (), c1.end ()); ,反向(c2.begin (), c2.end ()); ,(i=0; i< c2.length();我+ +) ,{ ,如果(c2.at (i)在=48,,c2.at(我)& lt;=57), c2.at (i) -=48; ,如果(c2.at (i)在=97,,c2.at(我)& lt;=122), c2.at (i) -=87; ,} ,(i=0; i< c1.length();我+ +) ,{ ,如果(c1.at (i)在=48,,c1.at(我)& lt;=57), c1.at (i) -=48; ,如果(c1.at (i)在=97,,c1.at(我)& lt;=122), c1.at (i) -=87; ,} ,(i=0; i< c2.length();我+ +) ,{ ,c1.at (i)=c1.at (i) -c2.at(我); ,} ,(i=0; i< c1.length() 1;我+ +) ,{ ,如果(c1.at(我)& lt; 0) ,{ c1.at才能(我)+=n; c1.at才能(i + 1); ,} ,} ,(i=c1.length () 1; i>=0;我——) ,{ ,如果(c1.at (i)在0),打破; ,} ,c1.erase (i + 1, c1.length ()); ,(i=0; i< c1.length();我+ +) ,{ ,如果(c1.at (i)在=10),c1.at (i) +=87; ,如果(c1.at(我)& lt; 10), c1.at(我)+=48; ,} ,反向(c1.begin (), c1.end ()); ,如果(j==1), c1.insert (0, d); ,return c1; } string 乘(string string b)//整数 { ,long int i, j, k,姚明=0,凯; ,string c1, c2; ,string c3=a + b; ,如果(a.at (0)==& # 39; & # 39;) ,{ ,a.erase (0,1); ,姚明+ +; ,} ,如果(在(0)==& # 39;& # 39;) ,{ ,b.erase (0,1); ,姚明+ +; ,} ,=dezero (); ,b=dezero (b); ,如果(a.at(0)==48 | |在(0)==48),return “0”; ,如果(a.length()在b.length ()) ,{ ,c1=一个; ,c2=b; ,} 其他的, ,{ ,c1=b; ,c2=一个; ,} ,反向(c1.begin (), c1.end ()); ,反向(c2.begin (), c2.end ()); ,(i=0; i< c2.length();我+ +) ,{ ,如果(c2.at (i)在=48,,c2.at(我)& lt;=57), c2.at (i) -=48; ,如果(c2.at (i)在=97,,c2.at(我)& lt;=122), c2.at (i) -=87; ,} ,(i=0; i< c1.length();我+ +) ,{ ,如果(c1.at (i)在=48,,c1.at(我)& lt;=57), c1.at (i) -=48; ,如果(c1.at (i)在=97,,c1.at(我)& lt;=122), c1.at (i) -=87; ,} ,(i=0; i< c3.length();我+ +),c3.at (i)=0; ,(i=0; i< c2.length();我+ +) ,{ ,(j=0; j< c1.length (); j + +) ,{ kai才能=c2.at(我)* c1.at (j); c3.at才能(i + j + 1) +=kai/n; c3.at才能(i + j) +=kai % n; ,,(k=i + j, k 怎么在c++中利用字符串实现幂运算