zbj_lg 2024-03-13 20:04 采纳率: 0%
浏览 3

重载运算符程序,不输入


#include<iomanip>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio> 
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<utility>
#define ll long long    
#define un unsigned
using namespace std;
struct Bignum{
    int len,a[105];
    Bignum(int x=0){
        memset(a,0,sizeof(a));
        for(len=1;x;len++) a[len]=x%10,x/10;
        len--;
    } 
    int &operator[](int i){
        return a[i];
    }
    void flatten(int L){
        len=L;
        for(int i=1;i<=len;i++) a[i+1]+=a[i]/10,a[i]%10;
        for(;!a[len];) len--;
    }
    void scanf(){
        for(int i=1;i<=len;i++) cin>>a[i];
    }
    void print(){
        for(int i=max(len,1);i>=1;i--) printf("%d",a[i]);
    }
};
Bignum operator+(Bignum a,Bignum b){
    Bignum c;
    int len=max(a.len,b.len);
    for(int i=1;i<=len;i++) c[i]+=a[i]+b[i];
    c.flatten(len+1);
    return c;
}
Bignum operator*(Bignum a,Bignum b){
    Bignum c;
    int len1=a.len,len2=b.len;
    for(int i=1;i<=len1;i++){
        for(int j=1;j<=len2;j++){
            c[i+j]=a[i]*b[j];
        }
    }
    c.flatten(len1+len2);
    return c;
}
int main(){
    Bignum a,b,ans;
    a.scanf();
    b.scanf();
    ans=a*b;
    ans.print();
    return 0;
}

有人能帮忙调一下程序吗 重载运算符

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-03-13 20:05
    关注

    coduck_S12004zbj 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    根据你的要求,你想重载运算符程序,但不想使用#include库。你还提供了代码,并向我们寻求帮助来对其进行修改。以下是你提供的代码:

    #include<iostream>
    #include<cmath>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cstdio> 
    #include<vector>
    #include<stack>
    #include<map>
    #include<queue>
    #include<utility>
    #define ll long long 
    #define un unsigned
    using namespace std;
    struct Bignum{
        int len,a[105];
        Bignum(int x=0){
            memset(a,0,sizeof(a));
            for(len=1;x;len++) a[len]=x%10,x/10;
            len--;
        } 
        int &operator[](int i){
            return a[i];
        }
        void flatten(int L){
            len=L;
            for(int i=1;i<=len;i++) a[i+1]+=a[i]/10,a[i]%10;
            for(;!a[len];) len--;
        }
        void scanf(){
            for(int i=1;i<=len;i++) cin>>a[i];
        }
        void print(){
            for(int i=max(len,1);i>=1;i--) printf("%d",a[i]);
        }
    };
    Bignum operator+(Bignum a,Bignum b){
        Bignum c;
        int len=max(a.len,b.len);
        for(int i=1;i<=len;i++) c[i]+=a[i]+b[i];
        c.flatten(len+1);
        return c;
    }
    Bignum operator*(Bignum a,Bignum b){
        Bignum c;
        int len1=a.len,len2=b.len;
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                c[i+j]=a[i]*b[j];
            }
        }
        c.flatten(len1+len2);
        return c;
    }
    int main(){
        Bignum a,b,ans;
        a.scanf();
        b.scanf();
        ans=a*b;
        ans.print();
        return 0;
    }
    

    为了重载运算符符合你的要求,首先要对代码进行以下修改:

    1. 删除#include<iomanip>,因为它在这个代码中没有被使用到,可以直接删除。
    2. 将结构体Bignum的定义和函数的实现移到主函数前面。这样可以避免出现函数的函数原型问题。
    3. scanf()函数和print()函数的实现代码从定义中移到结构体定义外的函数实现代中。这样可以保持主函数的整洁性,也更容易调试定位问题。

    以下是修改后的代码:

    #include<iostream>
    #include<cmath>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    #include<vector>
    #include<stack>
    #include<map>
    #include<queue>
    #include<utility>
    
    using namespace std;
    
    struct Bignum{
        int len,a[105];
        Bignum(int x=0){
            memset(a,0,sizeof(a));
            for(len=1;x;len++) a[len]=x%10,x/=10;
            len--;
        } 
        int &operator[](int i){
            return a[i];
        }
        void flatten(int L){
            len=L;
            for(int i=1;i<=len;i++) a[i+1]+=a[i]/10,a[i]%=10;
            for(;!a[len];) len--;
        }
    };
    
    Bignum operator+(Bignum a,Bignum b){
        Bignum c;
        int len=max(a.len,b.len);
        for(int i=1;i<=len;i++) c[i]+=a[i]+b[i];
        c.flatten(len+1);
        return c;
    }
    
    Bignum operator*(Bignum a,Bignum b){
        Bignum c;
        int len1=a.len,len2=b.len;
        for(int i=1;i<=len1;i++){
            for(int j=1;j<=len2;j++){
                c[i+j]+=a[i]*b[j];
            }
        }
        c.flatten(len1+len2);
        return c;
    }
    
    void scanf(Bignum &a){
        for(int i=1;i<=a.len;i++) cin>>a[i];
    }
    
    void print(Bignum a){
        for(int i=max(a.len,1);i>=1;i--) printf("%d",a[i]);
    }
    
    int main(){
        Bignum a,b,ans;
        scanf(a);
        scanf(b);
        ans=a*b;
        print(ans);
        return 0;
    }
    

    希望这能满足你的要求!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月13日