1475[ブルーブリッジカップ2019初戦]立方和[水題]


1475 [蓝桥杯2019初赛] 立方和 【水题】_第1张图片 http://oj.ecustacm.cn/problem.php?id=1475
解析:long long型を使用します.さもないと溢れ出します.
#include
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
"
,sum); return 0; }

簡略化:pow()関数
#include
#include
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
"
,sum); return 0; }

さらに簡略化:テーマはすでに上位40の立方と私たちに41~2019の数を計算するだけでいいです.
#include
#include
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
"
,sum); return 0; }