C++使用string的大數(shù)減法運(yùn)算(2)
本次項(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類(lèi)型首個(gè)比特位是作為正負(fù)號(hào)的
減法,此處只做自然數(shù)加法,因?yàn)榇嬖谪?fù)整數(shù)的話(huà)可以使用自然數(shù)加法來(lái)處理,只需判斷正負(fù)再看加減即可
運(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ù)減法
{
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;
}
int main()
{
string a,b;
while(cout<<"input:"&&cin>>a>>b)
{
cout<<"output:"<<minus(a,b)<<endl;
}
return 0;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言中隱藏結(jié)構(gòu)體的細(xì)節(jié)
以筆者粗淺的認(rèn)識(shí),有兩種最常用的方法,可以實(shí)現(xiàn)庫(kù)內(nèi)結(jié)構(gòu)體定義的隱藏:接口函數(shù)形參使用結(jié)構(gòu)體指針,接口函數(shù)形參使用句柄。2017-05-05
MFC擴(kuò)展DLL中導(dǎo)出類(lèi)和對(duì)話(huà)框的實(shí)現(xiàn)方法
這篇文章主要介紹了MFC擴(kuò)展DLL中導(dǎo)出類(lèi)和對(duì)話(huà)框的實(shí)現(xiàn)方法,詳細(xì)講述了實(shí)現(xiàn)擴(kuò)展DLL中導(dǎo)出類(lèi)和對(duì)話(huà)框的具體步驟與方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10
C++錯(cuò)誤使用迭代器超出引用范圍問(wèn)題及解決方案
這篇文章主要介紹了C++錯(cuò)誤使用迭代器超出引用范圍分析與解決,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
C++調(diào)用matlab引擎實(shí)現(xiàn)三維圖的繪制
這篇文章主要為大家詳細(xì)介紹了C++如何調(diào)用matlab引擎實(shí)現(xiàn)三維圖的繪制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++和Matlab有一定的幫助,需要的可以參考一下2022-12-12
使用C/C++語(yǔ)言生成一個(gè)隨機(jī)迷宮游戲
迷宮相信大家都走過(guò),主要是考驗(yàn)?zāi)愕倪壿嬎季S。今天小編使用C語(yǔ)言生成一個(gè)隨機(jī)迷宮游戲,具體實(shí)現(xiàn)代碼,大家通過(guò)本文學(xué)習(xí)吧2016-12-12
C++實(shí)現(xiàn)LeetCode(70.爬樓梯問(wèn)題)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(70.爬樓梯問(wèn)題),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
Qt實(shí)現(xiàn)部件透明陰影效果與不規(guī)則窗體詳解
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)部件透明陰影效果與不規(guī)則窗體的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01

