1 条题解

  • 0
    @ 2025-8-24 21:17:54

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar qiaotutu
    洛谷爱好の蒟蒻o้้้้๎๎๎๎้้้้๎๎๎๎้้้้๎๎๎๎้้้้๎๎๎๎้้้้๎๎๎๎้้้้๎๎๎๎้้้้๎๎๎๎๎้๎

    搬运于2025-08-24 21:17:53,当前版本为作者最后更新于2025-05-21 21:49:36,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    B4212 题解

    (新手第一次发题解,如有错误,敬请见谅)

    其实这道题只是看着难,把它拆开就简单了:把这道题拆成两部分——读数字与比大小。

    1. 读数字

    我们不要管什么字符、空格什么的,反正就是看见数字、小数点就读入字符串,有其它的字符就停止读入。
    注意读入‌数字位数‌。(若两数相同,数字位数区别‌只在小数部分‌,不用特判

    下列代码:

    if(isdigit(s[i])) {
        while(isdigit(s[i])||s[i]=='.'&&i<s.length()) {
            going.push_back(s[i]);
            i++;
            item++;
        }
    }
    

    (代码中的 goinggoing 为 string 类型,ii 为 for 循环的 int 型变量,itemitemplusmplusm 为 int 型变量)

    2. 比大小

    这里推荐使用 stod()函数,将 string 转化 double(后称新值)来比较最大值。有两个比较逻辑:

    新值比最大值大时:

    if(stod(going)>stod(nums)) {
        nums=going;
        plusm=item;
    }
    

    新值等于最大值时,比较位数

    if(stod(going)==stod(nums)) {
        if(item>plusm) {
            nums=going;
            plusm=item;
        }
    }
    
    

    最后直接输出字符串即可。(用双精度输出实在闲)
    ‌温馨提示:每次循环后记得清空位数计数器和临时字符串!‌

    AC 代码

    #include<bits/stdc++.h>
    using namespace std;
    int plusm=-1;
    string nums="-1";
    int main(){
        int item=0;
        string s,going="";
        getline(cin,s);
        for(int i=0;i<int(s.length());i++) {
            if(isdigit(s[i])) {
                while(isdigit(s[i])||s[i]=='.'&&i<s.length()) {
                    going.push_back(s[i]);
                    i++;
                    item++;
                }
                if(stod(going)>stod(nums)) {
                    nums=going;
                    plusm=item;
                }
                else if(stod(going)==stod(nums)) {
                    if(item>plusm) {
                        nums=going;
                        plusm=item;
                    }
                }
                going.clear();
                item=0;
            }
        }
        cout << nums;
        return 0;
    }
    

    谢谢观看!

    • 1

    信息

    ID
    7692
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者