用float或double转成整型都有精度损失,float精确6位,double 16位,有的编译器可能利用了80位的long double,那就不知道了。我想你可以直接使用long long int
#include
using namespace std;
int main()
{
float a = 3.14159265358979323e+18;
double b = 3.14159265358979323e+18;
long long c3 = 314159265358979323;
long long c1 = a;
long long c2 = b;
cout << c1 << endl; // float 精确位6
cout << c2 << endl; // doble 精确位16
cout << c3 << endl; // 精确
}
<< setprecision(n) //讲浮点精度设置为n(要#include
比如:
#include
#include
using namespace std;
int main()
{
........
cout<
先转化成字符串,然后输出
这是函数的原型
char *_gcvt( double value , int digits , char * buffer );
具体用法请查看MSDN
#include
#include
int main(void)
{
char str[25];
double num;
int sig = 5; /* significant digits */
/* a regular number */
num = 9.876;
gcvt(num, sig, str);
printf("string = %s\n", str);
/* a negative number */
num = -123.4567;
gcvt(num, sig, str);
printf("string = %s\n", str);
/* scientific notation */
num = 0.678e5;
gcvt(num, sig, str);
printf("string = %s\n", str);
return(0);
}
这是算N!的,把数组的大小改成多少就可以最大输出多少位
#include
main()
{
int date[500]={0};
int dight;
int i,j,r,k;
int n;
for(i=1;i<100+1;i++)
date[i]=0;
date[0]=1;
date[1]=1 ;
dight=1;
printf("input number:");
scanf("%d",&n);
for(i=1;i
for(j=1;j
for(j=1;j
if(date[j]>10)
{
for(r=1;r
if(date[dight]>10)
dight++;
date[r+1]+=date[r]/10;
date[r]=date[r]%10 ;
}
}
}
if(i==n)//////////////这里是输出
{
printf("%d! = ",i);
for(k=dight;k>0;k--)
printf("%d",date[k]);
printf("\n\n");
}} }
这是算N!的,把数组的大小改成多少就可以最大输出多少位
#include
main()
{
int
date[500]={0};
int
dight;
int
i,j,r,k;
int
n;
for(i=1;i<100+1;i++)
date[i]=0;
date[0]=1;
date[1]=1
;
dight=1;
printf("input
number:");
scanf("%d",&n);
for(i=1;i
{
for(j=1;j
for(j=1;j
if(date[j]>10)
{
for(r=1;r
if(date[dight]>10)
dight++;
date[r+1]+=date[r]/10;
date[r]=date[r]%10
;
}
}
}
if(i==n)//////////////这里是输出
{
printf("%d!
=
",i);
for(k=dight;k>0;k--)
printf("%d",date[k]);
printf("\n\n");
}}
}
<<
setprecision(n)
//讲浮点精度设置为n(要#include
比如:
#include
#include
using
namespace
std;
int
main()
{
........
cout<