来自小白的问题
为啥二次方时候可以,五次方不可以呢?而是要像第五张图一样再定义一个变量?图三定义的long long int 感觉明明可以塞得下,但是出来结果就是不对? 本帖最后由 迷雾少年 于 2019-8-12 13:58 编辑首先楼主发错地方了,其次拍的照很难看。
特意下了看了下,就是printf的格式参数错误而已
_CRTIMP double __cdecl pow (double, double);
===========================================
楼主看下pow函数的定义看下返回类型,vc6下我记得是int那肯定不行。其次printf输出的%d错了。 本帖最后由 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 成功编译运行。 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]