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

C++使用string的大數(shù)除法運算(4)

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

本次項目目標(biāo):使用C++完成對于大數(shù)的除法運算,供大家參考,具體內(nèi)容如下

項目要點

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

2.將大數(shù)用矩陣進行存儲,并通過矩陣實現(xiàn)運算

3.本人采用字符串進行存儲,應(yīng)注意char的特點

比如:char a=161;

     cout<<(int)a;

此時會輸出-95,而不是161,char類型首個比特位是作為正負號的

除法,除法主要采用的還是筆算的思想,需要用到之前博客當(dāng)中的減法函數(shù)minus

核心思想:比如861/21

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

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

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

                 21-21=0,記錄其減的次數(shù),就是結(jié)果,該結(jié)果只保留了整數(shù)部分,余數(shù)會在之后的取模運算博客中講到

                 其實可以明顯看出余數(shù)就是減完所有可以減掉的21之后的數(shù),也就是0

運行截圖及代碼如下:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define n 10
string dezero(string a)//用來去掉正數(shù)前面的0,也就是說可以輸入000001類似這樣的數(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)//判斷兩個正數(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ù)減法(在之前博客中寫到過,這里直接挪過來調(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 divide(string a,string b)//自然數(shù)除法
{
 if(b.length()==1&&b.at(0)==48) return "error";
 long int i,j;
 string c1,c2,d,e;
 if(judge(a,b)==0) return "1";
 if(judge(a,b)==-1)
 {
 return "0";
 }
 c1=dezero(a);
 c2=dezero(b);
 d="";
 e="";
 for(i=0;i<c1.length();i++)
 {
 j=0;
 d=d+c1.at(i);
 d=dezero(d);
 while(judge(d,b)>=0)
 {
 d=minus(d,b);//調(diào)用之前的減法函數(shù)minus,在本文中也加了進來
 d=dezero(d);
 j++;
 }
 e=e+"0";
 e.at(i)=j;
 }
 for(i=0;i<e.length();i++)
 {
 if(e.at(i)>=10) e.at(i)+=87;
 if(e.at(i)<10) e.at(i)+=48;
 }
 e=dezero(e);
 return e;
}
int main()
{
 string a,b;
 while(cout<<"input:"&&cin>>a>>b)
 {
 cout<<"output:"<<divide(a,b)<<endl;
 }
 return 0;
}

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

相關(guān)文章

  • 使用C語言實現(xiàn)從avi視頻中提取圖片

    使用C語言實現(xiàn)從avi視頻中提取圖片

    這篇文章主要為大家詳細介紹了如何使用C語言實現(xiàn)從avi視頻中提取圖片,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2023-10-10
  • C語言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(升序)

    C語言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(升序)

    這篇文章主要介紹了C語言 數(shù)據(jù)結(jié)構(gòu)堆排序順序存儲(升序)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • mfc文件操作CFile類之創(chuàng)建文件的方法

    mfc文件操作CFile類之創(chuàng)建文件的方法

    這篇文章主要介紹了mfc文件操作CFile類之創(chuàng)建文件的方法,需要的朋友可以參考下
    2019-04-04
  • C++ STL_vector 迭代器失效問題的解決方法

    C++ STL_vector 迭代器失效問題的解決方法

    迭代器的主要作用就是讓算法能夠不用關(guān)心底層數(shù)據(jù)結(jié)構(gòu),其底層實際就是一個指針,或者是對指針進行了封裝,迭代器失效,實際就是迭代器底層對應(yīng)指針?biāo)赶虻目臻g被銷毀了,對迭代器失效我們了解了,那么現(xiàn)在我們就分析,在vector中哪些操作會導(dǎo)致迭代器失效
    2023-08-08
  • C++獲取本機MAC,IP,MASK地址的方法

    C++獲取本機MAC,IP,MASK地址的方法

    這篇文章主要介紹了C++獲取本機MAC,IP,MASK地址的方法,主要通過IPHLPAPI.lib調(diào)用相關(guān)函數(shù)實現(xiàn)該功能,是非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • C語言函數(shù)棧幀的創(chuàng)建與銷毀原理圖解

    C語言函數(shù)棧幀的創(chuàng)建與銷毀原理圖解

    我們知道c語言中函數(shù)都是被調(diào)用的,main函數(shù)里面能調(diào)用其他函數(shù),其實main函數(shù)也是被別的函數(shù)調(diào)用的,下面通過本文給大家分享c語言函數(shù)棧幀的創(chuàng)建和銷毀過程,一起看看吧
    2022-05-05
  • Linux中利用c語言刪除某個目錄下的文件

    Linux中利用c語言刪除某個目錄下的文件

    這篇文章主要給大家介紹了Linux中利用c語言刪除某個目錄下文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    C/C++中棧(stack)&堆(heap)詳解及其作用介紹

    這篇文章主要介紹了C/C++中棧(stack)&堆(heap)詳解及其作用,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C語言用棧實現(xiàn)十進制轉(zhuǎn)換為二進制的方法示例

    C語言用棧實現(xiàn)十進制轉(zhuǎn)換為二進制的方法示例

    這篇文章主要介紹了C語言用棧實現(xiàn)十進制轉(zhuǎn)換為二進制的方法,結(jié)合實例形式分析了C語言棧的定義及進制轉(zhuǎn)換使用技巧,需要的朋友可以參考下
    2017-06-06
  • 詳解C語言如何計算結(jié)構(gòu)體大小(結(jié)構(gòu)體的內(nèi)存對齊)

    詳解C語言如何計算結(jié)構(gòu)體大小(結(jié)構(gòu)體的內(nèi)存對齊)

    結(jié)構(gòu)體的內(nèi)存對齊是有關(guān)結(jié)構(gòu)體內(nèi)容的很重要一個知識點,主要考察方式是計算結(jié)構(gòu)體的字節(jié)大小,所以本文就給大家詳細介紹一下C語言如何計算結(jié)構(gòu)體大小,文中的代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-07-07

最新評論

无棣县| 德昌县| 西林县| 湘潭县| 天峻县| 老河口市| 邵阳市| 镇安县| 巴东县| 怀来县| 嘉祥县| 苗栗县| 奈曼旗| 伊宁县| 江西省| 南昌市| 广东省| 女性| 安化县| 民和| 余江县| 本溪| 武汉市| 富平县| 莎车县| 富裕县| 海丰县| 田林县| 福泉市| 拉萨市| 陇川县| 共和县| 长乐市| 天气| 枣强县| 宁远县| 会东县| 武冈市| 津市市| 新宁县| 余江县|