C 程序寻找具有美丽属性的正整数
我编写了一个 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:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我会回答我自己的问题。错误在于我计算指数的方式,程序正在计算,例如如果
num=262144
,这个(((((2^6)^2)^1)^ 4)^4)
而不是2^(6^(2^(1^(4^(4)))))
。所以这里有一个解决方案:
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 of2^(6^(2^(1^(4^(4)))))
.So here is a solution: