是不休呀 发表于 2020-8-31 00:37:02

带你学c带你飞 取值范围 课后作业动动手第二问 问题

问题大概意思是: 输入一个整数255 输出这个整数的五次方 保留两位小数
正确的代码:
#include <stdio.h>
#include <math.h>

int main()
{
      int i;
      double result;

      printf("请输入一个整数:");
      scanf("%d", &i);

      result = pow(i, 5);

      printf("%d的五次方是:%.2f\n", i, result);

      return 0;
}

我的代码是: result的数据类型是 long unsigned int
结果 无法打印出255正确五次方值,显示的是   0.00
我的想法是: 整数的五次方也是整数,只是大一些,最后打印的时候%.2f就可以保留两位小数。
我想问一下,到底是哪里出问题了

baige 发表于 2020-8-31 00:41:14

本帖最后由 baige 于 2020-8-31 00:49 编辑

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

int main()
{
        int i;
        long long int result;

        printf("请输入一个整数:");
        scanf("%d", &i);

        result = pow(i, 5);

        printf("%d的五次方是:%lld\n", i, result);

        return 0;
}
%.2f是float 和double输出时使用的
用unsigned long int 得用%lu 但是输出的结果是不正确的,结果太大溢出了,要整数的话使用long long int

baige 发表于 2020-8-31 06:55:51

printf的输出格式
https://fishc.com.cn/forum.php?mod=viewthread&tid=66471&extra=page%3D1%26filter%3Dtypeid%26typeid%3D583

baige 发表于 2020-8-31 12:44:16

问题解决的话,请设置最佳

风过无痕1989 发表于 2020-9-1 01:37:15

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

int main()
{
      int i;
      double result;

      printf("请输入一个整数:");
      scanf("%d", &i);

      result = pow(i, 5);

      printf("%d的五次方是:%0.2e\n", i, result);

      return 0;
}


出错的原因是255的5次已经超出了双精度double型的范围而溢出了,因此,不能再用整型方式输出,必须要改用科学记数法输出,这才符合题设要求------保留两位小数,若采用 long long int ,它或许能正常输出,但它还是整数,也就不能可能有小数出现,是不符合题意的。
页: [1]
查看完整版本: 带你学c带你飞 取值范围 课后作业动动手第二问 问题