蓝桥杯 立方和

1.题目描述

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

2.问题分析

我们需要对1~2019中的每个数进行判断,思路为:对于某个数来说,我们先对它的个位数进行判断,如果个位数是由2、0、1、9组成,则直接将这个数代入计算即可。如果他的个位数不符合2、0、1、9,并且它是有十位数的,那我们就接着对十位数进行判断,十位数符合条件,我们就将此数带入运算,并进行下一个数的判断。以此类推。
注意:上边思路的加粗部分要引起注意,一定要明白在这个数有十位数的情况下,我们才能对十位数进行判断。比如一个数是3,它的个位数并不是由2、0、1、9组成。但我们没有验证3是否有十位数,就对它的十位数进行了判断,(3/10)%10是等于0的,这样我们就把一个不该用来计算的数带入最后的运算了

3.代码部分

#include<iostream>
using namespace std;
int main() {
	long long  sum = 0;
	for (long long  i = 1; i <= 2019; i++) {
	//下面代码是对个位数进行判断
		if (i % 10 == 2 || i % 10 == 0 || i % 10 == 1 || i % 10 == 9)
			{
				cout<<i<<endl; 
				sum = sum + i * i * i ;
				continue;
			}
 	//下面代码是对十位数进行判断
		if (i>=10) {
			if ( (i / 10) % 10 == 2 || (i / 10) % 10 == 0 || (i / 10) % 10 == 1 || (i / 10) % 10 == 9) {
				sum = sum + i* i * i;
				cout<<i<<endl;
				continue;
			}
		}
	//下面代码是对百位数进行判断
		if (i >= 100) {
			if ((i / 100) % 10 == 2 || (i / 100) % 10 == 0 || (i / 100) % 10 == 1 || (i / 100) % 10 == 9)
			{
				cout<<i<<endl;
				sum = sum +  i * i * i;
				continue;
			}
		}
	//下面代码是对千位数进行判断
		if (i >= 1000)
		{
			if ((i / 1000) % 10 == 2 || (i / 1000) % 10 == 0 || (i / 1000) % 10 == 1 || (i / 1000) % 10 == 9)
			{
				cout<<i<<endl;
				sum = sum +  i * i * i;
				continue;
			}
		}
	}
	cout << sum << endl;
	return 0;
}

代码的执行结果为:4097482414389(注意本题是立方和)

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页