用C++的类重载高精度加法,乘法和等于符号
生活随笔
收集整理的這篇文章主要介紹了
用C++的类重载高精度加法,乘法和等于符号
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
運行結果:
代碼如下:
#include<iostream> #include<algorithm> #include<string.h> #include<string> using namespace std;class BigInteger { public: string value;//重載為成員函數(shù)格式string operator*(const BigInteger &v){string a=this->value;string b=v.value;int lengthA,lengthB,aInt[205],bInt[205],mul[205]={0},mark,start;reverse(a.begin(),a.end());reverse(b.begin(),b.end());lengthA=a.length();lengthB=b.length(); for(int i=0;i<lengthA;i++){aInt[i]=(int)(a[i]-'0');}for(int i=0;i<lengthB;i++){bInt[i]=(int)(b[i]-'0');}//開始相乘 for(int i=0;i<lengthA;i++){for(int j=0;j<lengthB;j++){mul[i+j]+=aInt[i]*bInt[j];}}//處理for(int i=0;i<lengthA+lengthB;i++){mul[i+1]+=(int)mul[i]/10;mul[i]=mul[i]%10;} //結果轉化成字符串char mulChar[205];mark=204;while(mul[mark]==0)mark--;start=0;for(int i=mark;i>=0;i--){mulChar[start]=(char)(mul[i]+'0');start++;}mulChar[start]='\0';return (string)mulChar;}//高精度加法string operator+(const BigInteger &v){string a=this->value;string b=v.value;int lengthA,lengthB,aInt[255]={0},bInt[255]={0},plus[255]={0};reverse(a.begin(),a.end());reverse(b.begin(),b.end());lengthA=a.length();lengthB=b.length();for(int i=0;i<lengthA;i++){aInt[i]=(int)(a[i]-'0');}for(int i=0;i<lengthB;i++){bInt[i]=(int)(b[i]-'0');}//開始相加for(int i=0;i<255;i++){plus[i]=aInt[i]+bInt[i];} // 處理for(int i=0;i<250;i++){plus[i+1]+=(int)plus[i]/10;plus[i]=plus[i]%10;} //把結果轉化成字符串char plusChar[255];int mark=254;while(plus[mark]==0)mark--;int start=0;for(int i=mark;i>=0;i--){plusChar[start]=(char)(plus[i]+'0');start++;} plusChar[start]='\0';return (string)plusChar;} //高精度判斷 bool operator ==(const BigInteger &v){string a=this->value;string b=v.value;string str1="true";string str2="false"; return a==b;}//高精度減法 bool operator -(const BigInteger &v){string a=this->value;string b=v.value;int lengthA,lengthB,aInt[205],bInt[205],mul[205]={0},mark,start;reverse(a.begin(),a.end());reverse(b.begin(),b.end());lengthA=a.length();lengthB=b.length(); for(int i=0;i<lengthA;i++){aInt[i]=(int)(a[i]-'0');}for(int i=0;i<lengthB;i++){bInt[i]=(int)(b[i]-'0');}}};int main() {BigInteger a, b;while(true){string str;cin>>str;//尋找執(zhí)行什么操作for(int i=0;i<str.length();i++){if(str[i]=='*'){a.value=str.substr(0,i);b.value=str.substr(i+1,str.length());cout<<a*b<<endl; // 優(yōu)先用成員函數(shù)break;}if(str[i]=='+'){a.value=str.substr(0,i);b.value=str.substr(i+1,str.length());cout<<a+b<<endl; // 優(yōu)先用成員函數(shù)break;}if(str[i]=='='){a.value=str.substr(0,i);b.value=str.substr(i+2,str.length());if(a==b)cout<<"true"<<endl;elsecout<<"false"<<endl;break;}}}return 0; }?
總結
以上是生活随笔為你收集整理的用C++的类重载高精度加法,乘法和等于符号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用win32控制台应用程序绘制一个小房子
- 下一篇: C语言实现测量数据处理,求出实际值的范围