(六省)蓝桥真题 奇妙的数字

奇妙的数字

小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗?

请填写该数字,不要填写任何多余的内容。

 

#include <iostream>
#include <string>
#include <set> 
using namespace std; 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

//返回数字的位数
int numlen(int num)
{
	int len = 0;
	while(num > 0)
	{
		len++;
		num/= 10;
	}
	return len;
}
//判断是否包含0~9十个数字
int is_ok(int num1,int num2)
{
	int temp;
	set<int>s;//set集合特点:不添加已有的值
	s.clear(); 
	while(num1>0)
	{
		temp = num1%10;
		s.insert(temp);
		num1 /= 10;
	}
	while(num2>0)
	{
		temp = num2%10;
		s.insert(temp);
		num2 /= 10;
	}
	return s.size() == 10;
}
int main(int argc, char** argv) {

	int x2,x3;//该数的平方和立方
    int len;

	for(int i = 1; i < 10000; i++)
	{//通过立方来判断,该数字最大可能为三位数,故取上限10000
		x2 = i*i;
		x3 = i*i*i;
		len = numlen(x2) + numlen(x3);
		if(len == 10)
		{	//当位数和为10时,才能保证0~9的唯一包含
			if(is_ok(x2,x3))
			{
				cout<<i<<endl;
				cout<<x2<<"  "<<x3<<endl;
			}
		}	
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值