我知道这是一个常见的问题。但是我找不到一个可靠的直接答案。
16 ^ 54 = 1.0531229167e+65 (this is the result I want)
当我使用pow(16,54)
时,我得到:
105312291668557186697918027683670432318895095400549111254310977536.0
代码如下:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main(){
double public;
double a = 16;
double b = 54;
public = (pow(a,b));
printf("%.21f\n", public);
}
执行代码:
gcc main.c -lm
我做错了什么?
答案 0 :(得分:19)
我做错了什么?
有几件事:
%.10e
格式将科学记数法与printf
一起用于点后十位数的打印输出,int
main
public
来命名变量,因为您的程序需要移植到C ++,其中public
是关键字。以下是修复程序的方法:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(){
double p;
double a = 16;
double b = 54;
p = (pow(a,b));
printf("%.10e\n", p);
return 0;
}
答案 1 :(得分:8)
答案 2 :(得分:3)
如果您需要科学记数法,则需要使用%e
format specifier:
printf("%e\n", public);
^^
此外,public
是C ++中的keyword,因此,在此代码需要可移植的情况下,最好避免使用此类关键字。