PTA2024团队程序设计天梯赛-L1-103 整数的连续性 题解

原题链接

L1的题目一般不需要用到高级算法知识,解题一定要先想这个题暴力解法该怎么写,于是我就想到了把从a到b的所有整数历遍一遍,求出它们的连续性之后用maxx储存一个最大(max函数名冲突用不了,本蒟蒻习惯用maxx),然后再从a到b历遍一遍,若整数的连续性==maxx,那么把他输出。

题意:

输入输出格式要求:

输入样例:

500 700

输出样例:

5
679 688 697

按照题中的整数改变方法,把每一位数字相乘得到的结果作为下一个整数,那么整数是越乘越小的,因为一个多位数,比如说54321,5*10*10*10*10才是50000还比原数字小,这里*的还是10,更不要说每一位都是个位数了,原来数字a到b都在int范围内,所以只用开int范围大小就可以了。

废话不多说,下面是带注释代码,请大家多多指点蒟蒻!!!

带注释代码:

#include<bits/stdc++.h>
using namespace std;
int a,b,maxx,num;
int main(){
    cin>>a>>b;
    for(int i=a;i<=b;i++){//从a到b历遍每一个整数
        int temp=i;//先用temp存储方便后续计算,不影响循环
        int l=0;//l用来存储当前整数连续性
        while(temp>=10){//计算当前整数的连续性,不断循环直到得到一个个位数
            l++;//每一次循环先把连续性++
            int next=1;//next用来存储改变后的整数
            while(temp!=0){//计算出用temp的每一位相乘得到的整数next
                next*=temp%10;
                temp/=10;
            }
            temp=next;//把next赋值给temp使下一次循环正常进行
        }
        maxx=max(maxx,l);//maxx来存储所有整数连续性的最大值
    }
    cout<<maxx<<endl;//maxx计算完了可以先输出
    for(int i=a;i<=b;i++){//和上一个for循环一样先求每一个整数连续性,不同在于最后if判断
        int temp=i;
        int l=0;
        while(temp>=10){
            l++;
            int next=1;
            while(temp!=0){
                next*=temp%10;
                temp/=10;
            }
            temp=next;
        }
        if(l==maxx){//判断该整数连续性是否是最大连续性maxx
            if(num==0){//因为行尾不能有多余空格,所以用了个num来判断是否是第一个连续性为maxx的整数
                num++;
                cout<<i;
            }
            else cout<<" "<<i;//如果是第一个只输出整数,否则先输出一个空格
        }
    }
    return 0;
}

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值