题目描述
小明对数位中含有2、0、1、9 的数字很感兴趣,在1 到40 中这样的数包括1、2、9、10 至32、39 和40,共28 个,他们的和是574,平方和是14362。
注意,平方和是指将每个数分别平方后求和。
请问,在1 到2019 中,所有这样的数的平方和是多少?
答案:2658417853
思路
其实也不用想的多复杂,无非就是判断一个数里是否含有2,0,1,9这四个数中的一个或多个。比如我们如何判断一个数里是否含有2呢?是不是直接想到的是取出这个数的每一位,然后让每一位与2比较,然后就知道这个数里是不是有2了。那么怎么取出这个数的每一位呢?这就很简单了吧,对一个数每次除10求余,余数就是最低位。把这个数/10再%10,不就是倒数第二位数吗,以此类推,就可以找到这个数的每一位了,然后设个标志位判断即可。
代码
#include <iostream>
using namespace std;
int main()
{
long long int res = 0;
int i;
for(i = 1; i <= 2019 ; i++){
int flag = 0; //如果为0说明这个数不包含2,0,1,9
int t = i;
while(t!=0){
if(t%10==2||t%10==0||t%10==1||t%10==9){
flag = 1; //flag为1说明这个数符合要求
break;
}
t /=10;
}
if(flag == 1){
res += i*i;
}
}
printf("%lld",res);
return 0;
}