dingyiwen 发表于 2019-8-12 11:17:03

来自小白的问题

为啥二次方时候可以,五次方不可以呢?而是要像第五张图一样再定义一个变量?图三定义的long long int 感觉明明可以塞得下,但是出来结果就是不对?

迷雾少年 发表于 2019-8-12 11:59:42

本帖最后由 迷雾少年 于 2019-8-12 13:58 编辑

首先楼主发错地方了,其次拍的照很难看。

特意下了看了下,就是printf的格式参数错误而已
_CRTIMP        double __cdecl pow (double, double);

===========================================
楼主看下pow函数的定义看下返回类型,vc6下我记得是int那肯定不行。其次printf输出的%d错了。

jackz007 发表于 2019-8-12 12:55:09

本帖最后由 jackz007 于 2019-8-12 13:32 编辑

      楼主的关键问题有两个,第一个是变量类型错误,一个普通无符号32位整型数的表达范围是 0 ~ 2 ^ 32 - 1,而 128 ^ 5 的数值为 2 ^ 35,已经远远超出了一个整型数的表达范围;第二是格式描述符错误,"%d" 或 "%u" 只能用来显示普通整型数的数值,显示 64 位长整型数,格式描述符必须使用 "%I64u"(tdm-gcc 编译器)。
      想要解决问题,得把源码粘贴进代码块发布,就像下面这样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

main(void)
{
      unsigned long long x1 , x2                   ;/* 目标数值非常大,相关变量必须采用 64 位长整型 */
      int k                                        ;
      x1 = pow(128 , 5)                            ;/* 使用 C 语言标准库函数计算 128 ^ 5 */
      for(x2 = 1 , k = 0 ; k < 5 ; k ++) x2 *= 128 ;/* 使用自编算法计算 128 ^ 5 的数值 */
      printf("x1 = %I64u\n" , x1)                  ;/* 用 "%I64u" 格式符显示 64 位无符号长整型数 */
      printf("x2 = %I64u\n" , x2)                  ;/* 同上 */
}


      以上代码使用 tdm-gcc 5.1.0 x86 成功编译运行。

迷雾少年 发表于 2019-8-12 13:56:24

jackz007 发表于 2019-8-12 12:55
楼主的关键问题有两个,第一个是变量类型错误,一个普通无符号32位整型数的表达范围是 0 ~ 2 ^ 32 - ...

其实楼主的问题就一个,就是printf的时候格式参数错误
#include <stdio.h>
#include <stdlib.h>

int main()
{
    long long int a;
    a = pow(128,5);
    printf("%llu\n",a);
    return 0;
}

CodeBlocks通过
页: [1]
查看完整版本: 来自小白的问题