最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++使用string的大數(shù)取模運(yùn)算(5)

 更新時(shí)間:2019年09月18日 11:29:51   作者:好想告訴你wt  
這篇文章主要為大家詳細(xì)介紹了C++使用string的大數(shù)取模運(yùn)算,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本次項(xiàng)目目標(biāo):使用C++完成對(duì)于大數(shù)的相關(guān)運(yùn)算,具體有加減乘除取模。

項(xiàng)目要點(diǎn)

1.大數(shù)指的是遠(yuǎn)超long long int的數(shù)據(jù)

2.將大數(shù)用矩陣進(jìn)行存儲(chǔ),并通過(guò)矩陣實(shí)現(xiàn)運(yùn)算

3.本人采用字符串進(jìn)行存儲(chǔ),應(yīng)注意char的特點(diǎn)

比如:char a=161;

     cout<<(int)a;

此時(shí)會(huì)輸出-95,而不是161,char類(lèi)型首個(gè)比特位是作為正負(fù)號(hào)的

取模運(yùn)算其實(shí)和取余差不多,主要是取模在負(fù)數(shù)方面與取余不同

需要用到之前博客提到的減法運(yùn)算minus

核心思想:

先來(lái)看自然數(shù)的取模運(yùn)算

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

                 比如861mod21=861%21

                 先用86去減21 知道數(shù)值小于21時(shí)停止 也就是2

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

                 如果這個(gè)數(shù)大于等于21,則再用這個(gè)數(shù)減去它

                 21-21=0,當(dāng)已經(jīng)取出最后一位,而且這個(gè)數(shù)字小于21時(shí)停止

                 即得出861%21=0

接下來(lái)來(lái)看負(fù)整數(shù)的情況

假設(shè)有一個(gè)正整數(shù)k,a,(-k) mod a+k mod a=0 mod a

                  (-k) mod a=0 mod a - k mod a

                  因?yàn)閗 mod a<a,(-k) mod a<a

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

                   即一個(gè)負(fù)整數(shù)的模a,就為a-其絕對(duì)值的模a

運(yùn)行截圖及代碼如下:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define n 10
string dezero(string a)//用來(lái)去掉正數(shù)前面的0,也就是說(shuō)可以輸入000001類(lèi)似這樣的數(shù)字
{
 long int i;
 for(i=0;i<a.length();i++)
 {
 if(a.at(i)>48) break;
 }
 if(i==a.length()) return "0";
 a.erase(0,i);
 return a;
}
int judge(string a,string b)//判斷兩個(gè)正數(shù)的大小
{
 if(a.length()>b.length()) return 1;
 if(a.length()<b.length()) return -1;
 long int i;
 for(i=0;i<a.length();i++)
 {
 if(a.at(i)>b.at(i)) return 1;
 if(a.at(i)<b.at(i)) return -1;
 }
 return 0;
}
string minus(string a,string b)//自然數(shù)減法(在之前博客中寫(xiě)到過(guò),這里直接挪過(guò)來(lái)調(diào)用了)
{
 a=dezero(a);
 b=dezero(b);
 long int i,j=0;
 string c="0";
 string c1,c2;
 string d="-";
 if(judge(a,b)==0) return c;
 if(judge(a,b)==1)
 {
 c1=a;
 c2=b;
 }
 if(judge(a,b)==-1)
 {
 c1=b;
 c2=a;
 j=-1;
 }
 reverse(c1.begin(),c1.end());
 reverse(c2.begin(),c2.end());
 for(i=0;i<c2.length();i++)
 {
 if(c2.at(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<c1.length();i++)
 {
 if(c1.at(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<c2.length();i++)
 {
 c1.at(i)=c1.at(i)-c2.at(i);
 }
 for(i=0;i<c1.length()-1;i++)
 {
 if(c1.at(i)<0)
 {
 c1.at(i)+=n;
 c1.at(i+1)--;
 }
 }
 for(i=c1.length()-1;i>=0;i--)
 {
 if(c1.at(i)>0) break;
 }
 c1.erase(i+1,c1.length());
 for(i=0;i<c1.length();i++)
 {
 if(c1.at(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 mod(string a,string b)//取模運(yùn)算
{
 long int i,j=0;
 string c1,c2,c3,d;
 if(a.at(0)=='-') j=1;
 if(judge(a,b)==0) return "0";
 if(judge(a,b)==-1)
 {
 return a;
 }
 c1=dezero(a);
 c2=dezero(b);
 d="";
 for(i=0;i<c1.length();i++)
 {
 d=d+c1.at(i);
 while(judge(d,b)>=0)
 {
 d=minus(d,b);
 d=dezero(d);
 }
 }
 if(j==1) d=minus(b,d);
 return d;
}
int main()
{
 string a,b;
 while(cout<<"input:"&&cin>>a>>b)
 {
 cout<<"output:"<<mod(a,b)<<endl;
 }
 return 0;
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法

    Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法

    這篇文章主要給大家介紹了關(guān)于在Linux系統(tǒng)下C語(yǔ)言gets函數(shù)出現(xiàn)警告問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • C++ 空指針解引用的解決方法

    C++ 空指針解引用的解決方法

    空指針解引用是一種常見(jiàn)且嚴(yán)重的錯(cuò)誤,它通常由于指針未初始化、被設(shè)置為nullptr或指向無(wú)效地址引起,本文主要介紹了C++ 空指針解引用的解決方法,感興趣的可以了解一下
    2024-08-08
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易文本編輯器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 淺談C++重載、重寫(xiě)、重定義

    淺談C++重載、重寫(xiě)、重定義

    下面小編就為大家?guī)?lái)一篇淺談C++重載、重寫(xiě)、重定義。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例

    getdate()函數(shù)的用法實(shí)例,需要的朋友可以參考一下
    2013-03-03
  • C語(yǔ)言 深入講解條件編譯的用處

    C語(yǔ)言 深入講解條件編譯的用處

    C語(yǔ)言提供了條件編譯的語(yǔ)法,就是在編譯源碼的時(shí)候,可以選擇性地編譯指定的代碼。例如我們開(kāi)發(fā)一個(gè)兼容windows系統(tǒng)和linux系統(tǒng)運(yùn)行的項(xiàng)目,那么,一些與操作系統(tǒng)密切相關(guān)的代碼,就需要進(jìn)行選擇性編譯
    2022-04-04
  • C++使用map實(shí)現(xiàn)多進(jìn)程拷貝文件的程序思路

    C++使用map實(shí)現(xiàn)多進(jìn)程拷貝文件的程序思路

    這篇文章主要介紹了C++使用mmap實(shí)現(xiàn)多進(jìn)程拷貝文件,通過(guò)本文給大家分享程序思路及完整代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C語(yǔ)言計(jì)算分段函數(shù)問(wèn)題

    C語(yǔ)言計(jì)算分段函數(shù)問(wèn)題

    這篇文章主要介紹了C語(yǔ)言計(jì)算分段函數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    數(shù)組元素和數(shù)組名都可以作為函數(shù)的參數(shù)以實(shí)現(xiàn)函數(shù)間數(shù)據(jù)的傳遞和共享,下面這篇文章主要給大家介紹了關(guān)于C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • C語(yǔ)言每日練習(xí)之字符串反轉(zhuǎn)

    C語(yǔ)言每日練習(xí)之字符串反轉(zhuǎn)

    這篇文章主要介紹了C語(yǔ)言字符串反轉(zhuǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11

最新評(píng)論

宿州市| 桂阳县| 平阳县| 临西县| 淮阳县| 广南县| 崇文区| 平湖市| 三门县| 宜春市| 崇州市| 南岸区| 永丰县| 如东县| 望江县| 迁西县| 延边| 长子县| 黄石市| 清丰县| 乐陵市| 嵊州市| 砚山县| 米林县| 安阳市| 五原县| 延安市| 穆棱市| 仪征市| 合川市| 连城县| 天门市| 清原| 兴和县| 渝中区| 宜阳县| 和田市| 郎溪县| 孟津县| 防城港市| 肇庆市|