奇妙的数字
小明发现了一个奇妙的数字。它的平方和立方正好把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;
}