今天就跟大家聊聊有关怎么在C++中实现string的减法运算,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
项目要点
1.大数指的是远超long long int的数据
2.将大数用矩阵进行存储,并通过矩阵实现运算
3.本人采用字符串进行存储,应注意char的特点
比如:
char a=161;
cout<<(int)a;
此时会输出-95,而不是161,char类型首个比特位是作为正负号的
减法,此处只做自然数加法,因为存在负整数的话可以使用自然数加法来处理,只需判断正负再看加减即可
运行截图及代码如下
#include<iostream>
#include<string>
#include<algorithm>
usingnamespacestd;
#definen10
stringdezero(stringa)//用来去掉正数前面的0,也就是说可以输入000001类似这样的数字
{
longinti;
for(i=0;i<a.length();i++)
{
if(a.at(i)>48)break;
}
if(i==a.length())return"0";
a.erase(0,i);
returna;
}
intjudge(stringa,stringb)//判断两个正数的大小
{
if(a.length()>b.length())return1;
if(a.length()<b.length())return-1;
longinti;
for(i=0;i<a.length();i++)
{
if(a.at(i)>b.at(i))return1;
if(a.at(i)<b.at(i))return-1;
}
return0;
}
stringminus(stringa,stringb)//自然数减法
{
a=dezero(a);
b=dezero(b);
longinti,j=0;
stringc="0";
stringc1,c2;
stringd="-";
if(judge(a,b)==0)returnc;
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);
returnc1;
}
intmain()
{
stringa,b;
while(cout<<"input:"&&cin>>a>>b)
{
cout<<"output:"<<minus(a,b)<<endl;
}
return0;
}
看完上述内容,你们对怎么在C++中实现string的减法运算有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。