C程序用漂亮的属性找到正整数

C program to find positive integers with beautiful property

我编写了一个 C 程序来搜索具有这种 属性:

的正整数

很明显我希望程序至少输出数字262144,但我的程序没有输出这个。 1 也有这个 属性,我的程序确实输出了这个。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

long double digitspow(long int num){

   char numstr[30];

   sprintf(numstr,"%ld",num);   

   int n=strlen(numstr);
   int digits[n];
   long int total=((int) numstr[0])-48;

   for (int i=1; i<n;i++){
            
            digits[i]=((int) numstr[i])-48;
            total=pow(total,digits[i]);
            
   }
   return sqrt(total);

}

int main()
{

long int num;


for (int i=1;i<20000000;i++){

   num=i;
   if (abs(num - digitspow(num))<0.0000001){
    printf("%ld\n",num);
   }

}

我会回答我自己的问题。错误在于我计算指数的方式,程序正在计算,例如如果 num=262144,则此 (((((2^6)^2)^1)^4)^4) 而不是 2^(6^(2^(1^(4^(4)))))。 所以这是一个解决方案:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

long double digitspow(long long int num){

   char numstr[30];

   sprintf(numstr,"%ld",num);   

   long int n=strlen(numstr);
   int digits[n];
   long long int total=((int) numstr[n-1])-48;
   
//computing exponent here:
//
   for (int i=n-2; i>=0;i--){
            
            digits[i]=((int) numstr[i])-48;
            total=pow(digits[i], total);
            
   }
//
   return sqrt(total);

}

int main()
{

long long int num;


for (long long int i=1;i<262200;i++){

   num=i;
   if (abs(num - digitspow(num))<0.0000001){
    printf("%lld\n",num);
    printf("%lf\n",digitspow(num));
   }

}
}