题解:
这个题分两部分看:
(1)找到符合有:2、0、1、9的数。
(2)给找到的数进行平方然后累加求和。
找2、0、1、9,也就意味着把一个数拆开,拿出来比较,有,就符合条件。这里就用到取余%,**取整/**符号。但是随着循环会发现,累加的数横跨千位,万位以上,而我们又不知道具体是多少位。这里可以切割数字,**用取余%符号得到最后一位,用取整/符号把已经比较了的数扔掉,然后循环,**直到比较完所有的位数。
注意平方的和的值很大,使用long long类型,输出格式为:lld
累加用循环和pow()函数即可满足平方后求和。
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,k;
long long sum=0;//注意使用long long类型
for(i=1;i<=2019;i++)
{
for(j=i;j>0;j/=10)
{//循环遍历每一个数位,将已经比较过的位数扔掉。
k=j%10;
if(k==2||k==0||k==1||k==9)
{
sum+=pow(i,2);
break;//注意终止本层的循环
}
}
}
printf("%lld",sum);
}
运行结果: