2017-04-11 115 views
1

我尝试使用std ::法院打印以下整数< <如何打印整数无小数或科学记数法C++

256 6561 65536 390625 1679616 5764801 16777216 43046721亿

然而如果我用这个,我得到科学记数法:

#include <math.h> 
for (int k = 2; k <=10; ++k) 
    std::cout<< " " << pow(k, 8); //k to the power of 8 

256 6561 65536 390625 1.67962e + 06 5.7648e + 06 1.67772e + 07 4.30467e + 07 1E + 08

,如果我使用std ::固定,我收到不需要小数:

for (int k = 2; k <=10; ++k) 
    std::cout<< std::fixed << " " << pow(k, 8); 

256.000000 6561.000000 65536.000000 390625.000000 1679616.000000 5764801.000000 16777216.000000 43046721.000000 100000000.000000

什么我需要做的打印全长整数?

+4

那么['std :: pow'](http://en.cppreference.com/w/cpp/numeric/math/pow)函数*是一个浮点函数。 –

回答

2

pow返回浮点值,当它变大或变小时,以科学记数法显示。投射到一个足够大的整数,所以它将显示为一个整数。

#include <cmath> 
#include <iostream> 
int main() 
{ 
    for (int k = 2; k <= 10; ++k) 
     std::cout << " " << static_cast<int>(pow(k, 8)); 
} 

主要生产

256 6561 65536 390625 1679616 5764801 16777216 43046721亿

+0

对于足够大的数字,您可能会溢出整数的最大值 –

0

好了,我居然发现回答我的问题,但我会保持它,因为它可能是对其他人有用。

pow(a, b); 

返回“双浮点”,如nwp建议。 因此,性病::固定工作正常在避免科学记数法,和一个简单的:

static_cast<int>(pow(k, 8)); 

解决问题

+0

只是一个提示,在c + +避免旧式C转换。 static_cast 是更好的选择 –

+2

'(int)pow(k,8);'引入了一个不同的问题。 'int'不要求能够表示大于32767的值。 –

+0

要小心int可以保持的最大值 –

1

这似乎是你没有充分利用的std ::法院的功能。

流具有格式标志,用于确定如何将值发送到显示器。

#include <iostream> 
#include <math.h> 

int main(int argc, const char * argv[]) { 

    // 2^64 is 18,446,744,073,709,551,616 without the ','s is 20 places. 
    std::cout.precision(20); 


    for (int k = 2; k <=10; ++k) 
     std::cout<< " x = " << pow(k, 8); //k to the power of 8 

    std::cout << std::endl; 


    return 0; 
}