鱼C论坛

 找回密码
 立即注册
查看: 969|回复: 14

[已解决]pow精度问题

[复制链接]
发表于 2021-12-19 12:14:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬求助!!!为什么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 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-19 12:47:56 | 显示全部楼层
你的代码 for(i = pow(10, k); i < pow(10, k); i++) 就已经有问题了,i 初始值为 pow(10, k),循环条件为  i < pow(10, k),那岂不是永远进不了循环?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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),循环条件为  ...

哦哦,感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-19 21:49:28 | 显示全部楼层
tyl555 发表于 2021-12-19 21:47
哦哦,感谢大佬

但如果我把i=pow(10,k-1)呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-19 21:51:37 | 显示全部楼层
tyl555 发表于 2021-12-19 21:49
但如果我把i=pow(10,k-1)呢

可以知道你的题目是什么吗?不知道题目,很难判断该怎么改写你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-19 21:55:01 | 显示全部楼层
傻眼貓咪 发表于 2021-12-19 21:51
可以知道你的题目是什么吗?不知道题目,很难判断该怎么改写你的代码

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-19 21:58:08 | 显示全部楼层

输出水仙花数。输人一个正整数 n (3≤ n ≤7),输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幂之和等于它本身。例如153的各位数字的立方和是 1^3 +5^3+3^3=153。试编写相应程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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。试编写相应程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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。试编写相应程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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。试编写相应程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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。试编写相应程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-20 12:51:36 | 显示全部楼层
本帖最后由 tyl555 于 2021-12-20 12:53 编辑


感谢大佬,懂了。可以顺便说一原因吗?为什么while里面的pow不用转化成int型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-20 14:33:37 From FishC Mobile | 显示全部楼层
因为上面已经声明 x 和 y 是 int 了。
比如:

int a; // 声明 int 整数
a = 12.34; // 这里故意赋值浮点数,a 类型还是不变,整数 12,取下值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-21 10:25:39 From FishC Mobile | 显示全部楼层
哦哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 14:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表