早上起来看瞎逛,看了个题目,
找出这样的数:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
如: 203879 * 203879 = 41566646641
203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
简单的解法(其实有优化的方法,但不适合编程)
#include <iostream>
#include <vector>
#include <algorithm>
void num2vector(long long num, std::vector<int> &vNum)
{
while (num > 0)
{
vNum.push_back(num % 10);
num /= 10;
}
}
int main(int argc, char *argv[])
{
long long a = 0;
long long b = 0;
std::vector<int> vA, vB, vC;
std::vector<int>::iterator vit;
for (a = 100000; a < 1000000; a++)
{
if (vA.size() > 0) vA.clear();
if (vB.size() > 0) vB.clear();
if (vC.size() > 0) vC.clear();
num2vector(a, vA);
sort(vA.begin(), vA.end());
vit = std::unique(vA.begin(), vA.end());
if (vit != vA.end())
continue;
b = a * a;
num2vector(b, vB);
sort(vB.begin(), vB.end());
vit = unique(vB.begin(), vB.end());
vB.erase(vit, vB.end());
std::set_intersection(vA.begin(), vA.end(), vB.begin(), vB.end(),
std::inserter(vC, vC.begin()));
if (vC.size() == 0)
{
std::cout<<a<<" * "<<a<<" = "<<b<<std::endl;
}
}
return 0;
}
结果: 639172 * 639172 = 408540845584