吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
1827 = 21 * 87
2187 = 27 * 81
1994年柯利弗德·皮寇弗在Usenet社群sci.math的文章中首度提出吸血鬼数。后来皮寇弗将吸血鬼数写入他的书Keys to Infinity的第30章。
------以上摘自百度百科。
/*
Name: 吸血鬼数字
Author: Mcdragon
Date: 05-03-12 00:16
Description: 一个四位数字由两个两位数相乘得到,两个两位数的各位构成了这个四位数
*/
#include <iostream>
using namespace std;
void GetVanpireNumber(void);
bool IsContain(int iNum, int head, int tail);
int main()
{
GetVanpireNumber();
system("PAUSE");
return 0;
}
void GetVanpireNumber(void)
{
int head, tail, iNum;
for (head = 10; head < 100; ++head)
{
for (tail = 10; tail < head; ++tail)
{
iNum = head * tail;
if (iNum > 1000 && IsContain(iNum, head, tail))
cout << "There is a VanpireNumber: " << iNum
<< "= " << head << " * " << tail <<endl;
}
}
}
bool IsContain(int iNum, int head, int tail)
{
int a[10] = {0};
while (head)
{
a[head % 10]++;
head /= 10;
}
while (tail)
{
a[tail % 10]++;
tail /= 10;
}
while (iNum)
{
a[iNum % 10]--;
iNum /= 10;
}
for (int i = 0; i < 10; ++i)
{
if (a[i])
return false;
}
return true;
}