蓝桥杯—立方尾不变,有些数字的立方的末尾正好是该数字本身

今天刷了一道蓝桥杯的习题,题目的要求如下:

立方尾不变

有些数字的立方的末尾正好是该数字本身。
比如:1,4,5,6,9,24,25,....

请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。

请提交该整数,不要填写任何多余的内容。
答题思路:
1.  首先这道题没有对时间和内存做要求,所以可以采用穷举法,当然了肯定是越简单越好。
2.  由于10000内正整数的立方是一个很大的数,所以要用long long 类型来保存。

3.  比如说25的立方为15625,这个数就满足题的要求。25是一个两位数,我们只需要取出15625的后两位,来与25比较,判断是否相等。相等满足题的要求,则记录下来。


好吧,思路就说到这里,下面给出源代码。

代码如下:

ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<math.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	long long lng = 1;
	long int count = 0;
	int bit;
	int j = 0;
	long long end=0;
	long long mod = 0;
	long long temp = 0;
	for (int i =1; i<10000; i++)
	{
		lng = 1;
		bit = 1;
		end = 0;
		mod = 0;
		j = 0;

		temp = i;
		lng = (long long )pow(temp, 3);	//pow( )函数的返回值类型为double,所以强制转换为long long 类型

		while (temp >0)	//判断i是几位数,取余的时候则循环几次。
		{
			++j;	//求i是几位数,取余的时候共参考。
			temp = temp / 10;
		}

		while (j-- > 0)
		{
			bit = bit * 10;
		}
		end = lng%bit;	//根据i的位数,来判断取余的时候取几位。
		if (end == i)
		{
			count++;
			cout << i << endl;	//用于调试,让用户看的更直接。
		}
	}
	cout << count << endl;
	system("pause");
	return 0;
}

运行截图:



额加福利:

可能会有朋友些代码的时候遇见这种情况。

蓝桥杯—立方尾不变,有些数字的立方的末尾正好是该数字本身_第1张图片


蓝桥杯—立方尾不变,有些数字的立方的末尾正好是该数字本身_第2张图片

为什么lng=3751*3751*3751的结果不对呢?

3751*3751*3751,这个操作实际上系统在处理的时候默认是int的操作,int是32位的,其取值范围-2147483648~2147483647,也就是说根本放不下结果,所以给出的答案是错误的。
你改成下面这种就对了:

<span style="font-size:14px;"><strong>#include<iostteam>
using namespace std;
int main() 
{
    long long a = 3751;
    cout<<a*a*a<<endl;
}</strong></span>

而 pow的话是系统函数,会用double来进行运算,double有64位,完全可以放下结果,所以运算的结果是正确的。







你可能感兴趣的:(C++,long,long,蓝桥杯,解答,立方尾不变)