欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

項(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類型首個(gè)比特位是作為正負(fù)號(hào)的

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

核心思想:比如861/21

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

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

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

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

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

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

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define n 10
string dezero(string a)//用來(lái)去掉正數(shù)前面的0,也就是說(shuō)可以輸入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)//判斷兩個(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ù)減法(在之前博客中寫到過(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 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,在本文中也加了進(jìn)來(lái)
 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;
}

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

相關(guān)文章

  • 深入了解C語(yǔ)言指針

    深入了解C語(yǔ)言指針

    這篇文章主要介紹了C語(yǔ)言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價(jià)值。需要的朋友可以了解下
    2021-07-07
  • C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)簡(jiǎn)單介紹

    C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)簡(jiǎn)單介紹

    這篇文章主要為大家詳細(xì)介紹了C/C++產(chǎn)生隨機(jī)數(shù)函數(shù)的實(shí)現(xiàn)方法,如何使用C/C++產(chǎn)生隨機(jī)數(shù)函數(shù),感興趣的小伙伴們可以參考一下
    2016-04-04
  • C++淺析STL?迭代器?容器的使用

    C++淺析STL?迭代器?容器的使用

    這篇文章主要介紹了C++?STL、迭代器、容器,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • C語(yǔ)言實(shí)現(xiàn)字母大小寫轉(zhuǎn)換的方法

    C語(yǔ)言實(shí)現(xiàn)字母大小寫轉(zhuǎn)換的方法

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)字母大小寫轉(zhuǎn)換的方法,涉及C語(yǔ)言字符串的遍歷與轉(zhuǎn)換技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • C語(yǔ)言進(jìn)階練習(xí)二叉樹的遞歸遍歷

    C語(yǔ)言進(jìn)階練習(xí)二叉樹的遞歸遍歷

    樹是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹中稱為結(jié)點(diǎn))按分支關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹那樣。樹結(jié)構(gòu)在客觀世界中廣泛存在,如人類社會(huì)的族譜和各種社會(huì)組織機(jī)構(gòu)都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法
    2022-06-06
  • C語(yǔ)言實(shí)現(xiàn)求定積分的方法

    C語(yǔ)言實(shí)現(xiàn)求定積分的方法

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)求定積分的方法,涉及C語(yǔ)言操作相關(guān)數(shù)學(xué)函數(shù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • C++ Boost PropertyTree解析INI文件詳解

    C++ Boost PropertyTree解析INI文件詳解

    Boost PropertyTree庫(kù)不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過(guò)Boost PropertyTree解析INI文件,需要的可以參考一下
    2022-01-01
  • C++實(shí)例分析組合數(shù)的計(jì)算與排列組合的產(chǎn)生

    C++實(shí)例分析組合數(shù)的計(jì)算與排列組合的產(chǎn)生

    這篇文章主要介紹了C++組合數(shù)的計(jì)算與排列和組合無(wú)重集元素的產(chǎn)生,對(duì)計(jì)算算法感興趣的同學(xué),可以參考一下,理解其原理,并且試驗(yàn)一下。
    2022-07-07
  • C++核心編程之內(nèi)存分區(qū)詳解

    C++核心編程之內(nèi)存分區(qū)詳解

    這篇文章主要為大家詳細(xì)介紹了C++核心編程之內(nèi)存分區(qū),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法

    MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法

    這篇文章主要介紹了MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法,詳細(xì)講述了實(shí)現(xiàn)擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的具體步驟與方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論