http://oj.ecustacm.cn/problem.php?id=1475
解析:
要用long long 型。不然会溢出。
#include<cstdio>
bool judge(int n)
{
while(n)
{
int a=n%10;
if(a==2||a==0||a==1||a==9)
{
return true;
}
n=n/10;
}
return false;
}
int main(void)
{
long long unsigned int sum=1;
for(long long int i=2;i<=2019;i++)
{
if(judge(i))
sum+=i*i*i;
}
printf("%llu\n",sum);
return 0;
}
简化: 用 pow()函数
#include<cstdio>
#include<cmath>
bool judge(int n)
{
while(n)
{
int a=n%10;
if(a==2||a==0||a==1||a==9)
{
return true;
}
n=n/10;
}
return false;
}
int main(void)
{
long long unsigned int sum=1;
for(long long int i=2;i<=2019;i++)
{
if(judge(i))
sum+=pow(i,3);
}
printf("%llu\n",sum);
return 0;
}
进一步的简化: 题目已经给了前40的立方和 我们只需计算 41~ 2019中的数即可
#include<cstdio>
#include<cmath>
bool judge(int n)
{
while(n)
{
int a=n%10;
if(a==2||a==0||a==1||a==9)
{
return true;
}
n=n/10;
}
return false;
}
int main(void)
{
long long unsigned int sum=400816;
for(long long int i=41;i<=2019;i++)
{
if(judge(i))
sum+=pow(i,3);
}
printf("%llu\n",sum);
return 0;
}