^^g码卡巴卡g^^ 2025-02-16 09:56 采纳率: 80%
浏览 23
已结题

!“比大小c++”!

输入两个大整数,
a,b,请输出他们谁大谁小。
如果
a>b,那么输出 first
如果
b>a,那么输出 second
如果
a=b,那么输出 same
对于 100% 的数据,
-10^100<=a,b<=10^100
代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string a,b;
    cin>>a>>b;
    int f1=0,f2=0;
    if(a[0]=='-') f1=1;
    if(b[0]=='-') f2=1;
    if(f1==1&&f2==0){
        cout<<"second";
        return 0;
    }
    else if(f1==0&&f2==1){
        cout<<"first";
        return 0;
    }
    else if(f1==0&&f2==0){
        if(a.size()!=b.size()){
            if(max(a.size(),b.size())==a.size())
                cout<<"first";
            else
                cout<<"second";
            return 0;
        }else{
            for(int i=0;i<a.size();i++){
                if(a[i]>b[i]){
                    cout<<"second";
                    return 0;
                }if(a[i]<b[i]){
                    cout<<"first";
                    return 0;
                }
            }
        }
    }else if(f1==1&&f2==1){
        if(a.size()!=b.size()){
            if(max(a.size(),b.size())==a.size())
                cout<<"second";
            else
                cout<<"first";
            return 0;
        }else{
            for(int i=0;i<a.size();i++){
                if(a[i]>b[i]){
                    cout<<"second";
                    return 0;
                }if(a[i]<b[i]){
                    cout<<"first";
                    return 0;
                }
            }
        }
    }
    cout<<"same";
    return 0;
}

我哪里错了?

  • 写回答

3条回答 默认 最新

  • a5156520 2025-02-16 12:05
    关注

    从逻辑来看,第27行的"second"应为"first",第28行的"first"应为"second"。

    修改如下:

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        string a,b;
        cin>>a>>b;
        int f1=0,f2=0;
        if(a[0]=='-') f1=1;
        if(b[0]=='-') f2=1;
        if(f1==1&&f2==0){
            cout<<"second";
            return 0;
        }
        else if(f1==0&&f2==1){
            cout<<"first";
            return 0;
        }
        else if(f1==0&&f2==0){
            if(a.size()!=b.size()){
                if(max(a.size(),b.size())==a.size())
                    cout<<"first";
                else
                    cout<<"second";
                return 0;
            }else{
                for(int i=0;i<a.size();i++){
                    // 此处当前数组a的元素比数组b的元素大,则应输出"first" 
                    if(a[i]>b[i]){
                        cout<<"first";
                        return 0;
                    }
                    // 此处数组a的元素比数组b的小,在应输出"second" 
                    if(a[i]<b[i]){
                        cout<<"second";
                        return 0;
                    }
                }
            }
        }else if(f1==1&&f2==1){
            if(a.size()!=b.size()){
                if(max(a.size(),b.size())==a.size())
                    cout<<"second";
                else
                    cout<<"first";
                return 0;
            }else{
                for(int i=0;i<a.size();i++){
                    if(a[i]>b[i]){
                        cout<<"second";
                        return 0;
                    }if(a[i]<b[i]){
                        cout<<"first";
                        return 0;
                    }
                }
            }
        }
        cout<<"same";
        return 0;
    }
     
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月24日
  • 已采纳回答 2月16日
  • 创建了问题 2月16日