怎么在c++中实现字符串的取模运算

  介绍

怎么在c++中实现字符串的取模运算?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>项目要点

1。大数指的是远超长长的int的数据

2。将大数用矩阵进行存储,并通过矩阵实现运算

3。本人采用字符串进行存储,应注意char的特点

比如:char=161;

,,,,, cout<& lt; (int);

此时会输出-95年,而不是161字符类型首个比特位是作为正负号的

取模运算其实和取余差不多,主要是取模在负数方面与取余不同

需要用到之前博客提到的减法运算-

<强>核心思想:

先来看自然数的取模运算

与取余相同,与除法思路相同

,,,,,,,,861年,比如mod21 21

=861%,,,,,,,,,先用86去减21知道数值小于21时停止也就是2

,,,,,,,,,再添加上下一位,就变成了21

,,,,,,,,,如果这个数大于等于21日,则再用这个数减去它

,,,,,,,,,21-21=0,当已经取出最后一位,而且这个数字小于21时停止

,,,,,,,,21=0,即得出861%

接下来来看<强>负整数的情况

假设有一个正整数k, a, (- k)国防部+ k mod=0 mod

,,,,,,,,,,,,,,,,,, (- k) mod=0 mod - k mod

,,,,,,,,,,,,,,,,,,因为k mod a

,,,,,,,,,,,,,,,,,,所以(- k) mod=a - k mod

,,,,,,,,,,,,,,,,,,即一个负整数的模,就为a -其绝对值的模一个

运行截图及代码如下:

怎么在c++中实现字符串的取模运算

# 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=0;   ,string  c1, c2, c3, d;   ,如果(a.at (0)==& # 39; & # 39;), j=1;   ,如果(法官(a, b)==0), return “0”;   ,如果法官(a, b)==1)   ,{   ,return ;   ,}   c1=dezero,(一个);   ,c2=dezero (b);   ,d=?“;   ,(i=0; i< c1.length();我+ +)   ,{   ,d=d + c1.at(我);   ,而(法官(d, b)在=0)   ,{   ,d=- (d、b);   ,d=dezero (d);   ,}   ,}   ,如果(j==1), d=- (b, d);   ,return  d;   }   int  main ()   {   ,string  a、b;   ,而(cout

怎么在c++中实现字符串的取模运算