tyl555 发表于 2021-12-19 12:14:22

pow精度问题

大佬求助!!!为什么pow里面是k的时候输出的值不对呀?
#include <stdio.h>
#include<math.h>
int main(int argc, char *argv[])
{
        int i,t,j;
        double k=3;
        double sum;
        for(i=pow(10,k);i<pow(10,k);i++){
                t=i;
          sum=0;
   for(j=3;j>0;j--){
          
    sum=sum+pow(t%10,k);

          t=t/10;
          
        }if(i==sum){
             printf("%lf\n",sum);
          }
        }
        return 0;
}

傻眼貓咪 发表于 2021-12-19 12:47:56

你的代码 for(i = pow(10, k); i < pow(10, k); i++) 就已经有问题了,i 初始值为 pow(10, k),循环条件为i < pow(10, k),那岂不是永远进不了循环?

tyl555 发表于 2021-12-19 21:47:40

傻眼貓咪 发表于 2021-12-19 12:47
你的代码 for(i = pow(10, k); i < pow(10, k); i++) 就已经有问题了,i 初始值为 pow(10, k),循环条件为...

哦哦,感谢大佬

tyl555 发表于 2021-12-19 21:49:28

tyl555 发表于 2021-12-19 21:47
哦哦,感谢大佬

但如果我把i=pow(10,k-1)呢

傻眼貓咪 发表于 2021-12-19 21:51:37

tyl555 发表于 2021-12-19 21:49
但如果我把i=pow(10,k-1)呢

可以知道你的题目是什么吗?不知道题目,很难判断该怎么改写你的代码{:5_104:}

tyl555 发表于 2021-12-19 21:55:01

傻眼貓咪 发表于 2021-12-19 21:51
可以知道你的题目是什么吗?不知道题目,很难判断该怎么改写你的代码

好的

tyl555 发表于 2021-12-19 21:58:08

tyl555 发表于 2021-12-19 21:55
好的

输出水仙花数。输人一个正整数 n (3≤ n ≤7),输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幂之和等于它本身。例如153的各位数字的立方和是 1^3 +5^3+3^3=153。试编写相应程序。

tyl555 发表于 2021-12-19 21:58:51

傻眼貓咪 发表于 2021-12-19 21:51
可以知道你的题目是什么吗?不知道题目,很难判断该怎么改写你的代码

输出水仙花数。输人一个正整数 n (3≤ n ≤7),输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幂之和等于它本身。例如153的各位数字的立方和是 1^3 +5^3+3^3=153。试编写相应程序。

tyl555 发表于 2021-12-19 22:04:34

傻眼貓咪 发表于 2021-12-19 21:51
可以知道你的题目是什么吗?不知道题目,很难判断该怎么改写你的代码

输出水仙花数。输人一个正整数 n (3≤ n ≤7),输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幂之和等于它本身。例如153的各位数字的立方和是 1^3 +5^3+3^3=153。试编写相应程序。

tyl555 发表于 2021-12-19 22:14:21

傻眼貓咪 发表于 2021-12-19 12:47
你的代码 for(i = pow(10, k); i < pow(10, k); i++) 就已经有问题了,i 初始值为 pow(10, k),循环条件为...

输出水仙花数。输人一个正整数 n (3≤ n ≤7),输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幂之和等于它本身。例如153的各位数字的立方和是 1^3 +5^3+3^3=153。试编写相应程序。

tyl555 发表于 2021-12-19 22:14:55

傻眼貓咪 发表于 2021-12-19 21:51
可以知道你的题目是什么吗?不知道题目,很难判断该怎么改写你的代码

输出水仙花数。输人一个正整数 n (3≤ n ≤7),输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幂之和等于它本身。例如153的各位数字的立方和是 1^3 +5^3+3^3=153。试编写相应程序。

傻眼貓咪 发表于 2021-12-19 22:26:39

tyl555 发表于 2021-12-19 21:58
输出水仙花数。输人一个正整数 n (3≤ n ≤7),输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它 ...

#include <stdio.h>
#include <math.h>

int main()
{
    int n, a, b, x, y;
   
    scanf("%d", &n);
   
    a = pow(10, n-1);
    b = a*10-1;
   
    for(int i = a; i <= b; i++){
      x = i;
      y = 0;
      while(x){
            y += pow(x%10, n);
            x /= 10;
      }
      if(y == i) printf("%d\n", y);
    }
    return 0;
}

tyl555 发表于 2021-12-20 12:51:36

本帖最后由 tyl555 于 2021-12-20 12:53 编辑

傻眼貓咪 发表于 2021-12-19 22:26


感谢大佬,懂了。可以顺便说一原因吗?为什么while里面的pow不用转化成int型

傻眼貓咪 发表于 2021-12-20 14:33:37

因为上面已经声明 x 和 y 是 int 了。
比如:

int a; // 声明 int 整数
a = 12.34; // 这里故意赋值浮点数,a 类型还是不变,整数 12,取下值。

tyl555 发表于 2021-12-21 10:25:39

哦哦
页: [1]
查看完整版本: pow精度问题