前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1452: [蓝桥杯2019初赛]平方和

1452: [蓝桥杯2019初赛]平方和

作者头像
可爱见见
发布2020-02-26 15:42:48
9030
发布2020-02-26 15:42:48
举报
文章被收录于专栏:卡尼慕

题目

小明对数位中含有2、0、1、9 的数字很感兴趣,在1 到40 中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574,平方和是14362。注意,平方和是指将每个数分别平方后求和。请问,在1 到2019 中,所有这样的数的平方和是多少?

思路

方法一:想要找是否包含字串,很容易想到string的find函数,但是缺点就是需要将每一项都要转换成string。

方法二:对每项逐步取余除10操作,即可获得每项的每位数,对比即可。

代码

方法1:使用string库中的find。

将int转换为string,再进行字符串字串的对比,这里需要注意返回值。

string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)

代码语言:javascript
复制
//1452: [蓝桥杯2019初赛]平方和
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    long long sum = 0;
    int a = 0;
    string::size_type idx;  //string find的返回值 
    string str;
    char c[5];
    for(int i = 1; i <= 2019; i++){
        stringstream ss;
        ss << i;
        string str = ss.str();
        if(str.find('2') != string::npos){  //不等于即说明存在 
            sum += i * i;
        }
        else if(str.find('0') != string::npos){
            sum += i * i;
        }
        else if(str.find('1') != string::npos){
            sum += i * i;
        }
        else if(str.find('9') != string::npos){
            sum += i * i;
        }
    }
    cout<<sum;
    return 0;
}

方法二:取余逐位判断

代码语言:javascript
复制
//1452 方法二:除10判断
#include <iostream>
using namespace std;
long long ans = 0;
bool check(int num){
    bool flag = false;
    while(num){
        int tmp = num % 10;
        if(tmp == 2 || tmp == 0 || tmp == 1 || tmp == 9){
            flag = true;
        }
        num /= 10;
    }
    return flag ? true : false;
}
int main(){
    for(int i=1;i<=2019;i++)
        if(check(i))
            ans+=i*i;
    cout<<ans<<endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卡尼慕 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档