四位寄生虫数字
四位吸血鬼数字
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,
而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取
的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列
数字都是“吸血鬼”数字:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
下面是我写的关于求出所有四位吸血鬼数字的代码,请大家看看有没有问题,或者有没有更加高效的算法。
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,
而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取
的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列
数字都是“吸血鬼”数字:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
下面是我写的关于求出所有四位吸血鬼数字的代码,请大家看看有没有问题,或者有没有更加高效的算法。
#include<stdio.h> #include<string.h> #include <stdlib.h> int compare(const char* a,const char* b) { if(*a>*b) { return 1; }else if(*a<*b) { return -1; }else{ return 0; } } void search() { int i=0,j=0; int temp=0; char buf1[5]={0}; char buf2[5]={0}; char buf3[3]={0}; for(i=10;i<100;i++) { for(j=i+1;j<100;j++) { temp=i*j; if(temp<1000||temp>9999) { continue; } itoa(temp,buf1,10); itoa(i,buf2,10); itoa(j,buf3,10); strcat(buf2,buf3); qsort(buf1,4,1,compare); qsort(buf2,4,1,compare); if(buf1[0]==buf2[0]&&buf1[1]==buf2[1]&&buf1[2]==buf2[2]&&buf1[3]==buf2[3]) { printf("%d=%d*%d\n",temp,i,j); } } } } int main() { search(); return 0; }