C 程序寻找具有美丽属性的正整数

发布于 2025-01-11 16:40:53 字数 879 浏览 0 评论 0原文

我编写了一个 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);
   }

}

I made a C program to search for positive integers that has this kind of property:

enter image description here

So clearly I want the program to at least output the number 262144, but my program does not output this. And also 1 has this property, and my program does output this.

#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);
   }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

趴在窗边数星星i 2025-01-18 16:40:53

我会回答我自己的问题。错误在于我计算指数的方式,程序正在计算,例如如果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));
   }

}
}

I will answer my own question. The mistake is in the way I compute the exponent, the program was computing, for example if num=262144, this (((((2^6)^2)^1)^4)^4) instead of 2^(6^(2^(1^(4^(4))))).
So here is a solution:

#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));
   }

}
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文