算法入门经典P126(BigInteger+,<,>,<=,>=,!=,==,+=,const)

复制代码
#include<iostream>
using namespace std;
#include<vector>
#include<cstring>
struct BigInteger{
    static const int BASE = 100000000;
    static const int WIDTH = 8;
    vector<int>s; 
    BigInteger(long long num = 0){
        *this = num;
    }
    BigInteger operator = (long long num){
        s.clear();
        do{
            s.push_back(num%BASE);
            num /= BASE;
        }while(num>0);
        return *this;
    } 
    BigInteger operator = (const string&str){//123456789
        s.clear();
        int x,len = (str.length()-1)/WIDTH + 1;//len=2
        for(int i=0;i<len;i++){
            int end = str.length()-i*WIDTH;//end=9,1
            int start = max(0,end-WIDTH);//start=1,0
            sscanf(str.substr(start,end-start).c_str(),"%d",&x);
            s.push_back(x);
        }
        return *this;
    }
    BigInteger operator +(const BigInteger&b)const{
        BigInteger c;
        c.s.clear();
        for(int i=0,g=0;;i++){
            if(g==0&&i>=s.size()&&i>=b.s.size())break;
            int x = g;
            if(i<s.size())x += s[i];
            if(i<b.s.size())x += b.s[i];
            c.s.push_back(x%BASE);
            g = x/BASE; 
        }
        return c;
    }
    BigInteger operator += (const BigInteger&b){
        *this = *this+b;
        return *this;
    }
    bool operator <(const BigInteger&b)const{
        if(s.size()!=b.s.size())return s.size()<b.s.size();
        for(int i=s.size()-1;i>=0;i--){
            if(s[i]!=b.s[i]){
                return s[i]<b.s[i];
            }
        }
        return false;
    }
    bool operator >(const BigInteger&b)const{
        return b<*this;
    }
    bool operator <=(const BigInteger&b)const{
        return !(b<*this);
    }
    bool operator >=(const BigInteger&b)const {
        return !(*this<b);
    }
    bool operator !=(const BigInteger&b)const{
        return b<*this||*this<b;
    }
    bool operator ==(const BigInteger&b)const{
        return !(b<*this||*this<b);
    }
};
ostream&operator <<(ostream&out,BigInteger&x){
    out<<x.s.back();
    char buf[20];
    for(int i=x.s.size()-2;i>=0;i--){
        sprintf(buf,"%08d",x.s[i]);
        for(int j=0;j<strlen(buf);j++){
            out<<buf[j];
        }
    }
    return out;
}
istream&operator >>(istream&in,BigInteger&x){
    string s;
    if(!(in>>s)){
        return in;
    }
    x = s;
    return in;
}
int main(){
    BigInteger x,y;
    cin>>x>>y;
    bool f;
    f = x<y;
    cout<<f<<endl;
    f = x>y;
    cout<<f<<endl;
    f = x!=y;
    cout<<f<<endl;
    f = x<=y;
    cout<<f<<endl;
    f = x>=y;
    cout<<f<<endl;
    f = x==y;
    cout<<f<<endl;
    return 0;
}
复制代码

 非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员

 https://baike.baidu.com/item/CONST/2384845#viewPageContent

posted @   智人心  阅读(53)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示