蓝桥杯-拼接平方数

这题实在恶心,题目意思根本没有表达清楚,如果你跟我一样把数拆为多位,然后判断平方,绝对错,例如441,169<=441<=10000,且可以分为2/2/1,如果按题目意思来他是拼接平方数吧,但是他不在测试用例内。

题目真实意思:1.数本身为平方数。2.如果数位不为1,拆分为2块且2块都为平方数。

在这里声明,我写了很多库函数,如果看不懂很正常你可以查,不想写过多没用的注释。

#include <bits/stdc++.h>
using namespace  std;

const int N=1e6;

bool check(int k){//判断是否为平方数
    if(k==0)return false;
    double x=sqrt(k),y=(int)x;//含有小数的:非平方数,不含小数的:平方数
    return x==y;
}
vector<int> res;
int init=[](){
    for(int i=1;i<=N;++i){
        int ten=(int)log10(i)+1;//判断i的数位有多少,例如:1000,ten=4
        if(ten==1){//数位为1
            if(check(i))res.push_back(i);
            continue;
        }
        if(!check(i))continue;//如果不符合i为平方数,直接跳过
        //分成两部分,pre+suf==平方数(true)
        string str=to_string(i);//转为string
        for(int j=1;j<ten;++j){
            //atoi函数是c库里的将char*转化为int,string::substr切割子串,c_str:让string也能在c库函数中使用(没有过多的了解)
            int pre=atoi(str.substr(0,j).c_str()),suf=atoi(str.substr(j,ten-j).c_str());
            if(check(pre)&&check(suf)){
                res.push_back(i);
                break;
            }
        }
    }
    return 0;
}();


int main(){

    int a,b;
    cin>>a>>b;
    for(auto& x:res)
    {
        if(x>=a&&x<=b)
            cout<<x<<endl;
    }
    return 0;
}

结束了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值