三、题目:奇妙的数字
题目描述:小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?请填写该数字,不要填写任何多余的内容.
1.分析思路:
枚举法,和之前的几道题目类似,
把数字转化为字符串,比较数字位数
2.代码:
#include<iostream>
#include<sstream>
#include<string>
#include<set>
using namespace std;
void i2s(int num,string &str){ //把数字转化为字符串
stringstream ss;
ss<<num; //输入数字
ss>>str; //输出为字符串
}
bool check(string s){ //判定转化后的数字是否为0-9且只出现一次
set<char> ss; //去掉重复
for(int i=0;i<s.length();i++){
ss.insert(s[i]);
}
return s.size()==10&&ss.size()==10; //字符串的长度为10,且计算平方和和立方和相加位数为10
}
int main(){
for(int i=1;i<100000;i++){
string s1,s2;
i2s(i*i,s1);
i2s(i*i*i,s2);
if(check(s1+s2)){ //平方和立方和拼接
// break;
cout<<i<<endl;
}
}
return 0;
}
之后检验一下是否正确
6969=4761
6969*69=328509
拼起来正好就是10位数字