如题所述
第1个回答 2014-02-08
#include <stdio.h>
long a=10000,b,c=2800,d,e,f[2801],g;
main()
{
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}
long a=10000,b,c=2800,d,e,f[2801],g;
main()
{
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}
牛人写的,看了几天没研究懂,要这有用么?关键是算法,在弄清算法的前提下编写程序才能真正提高编程能力,要不然看了也是白搭。
代码如下:
第2个回答 2014-02-08
#include<cstdio>
long long a=10000,b,c=2800,d,e,f[2801],g;
int main()
{
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
system("pause");
return 0;
}追问
long long a=10000,b,c=2800,d,e,f[2801],g;
int main()
{
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
system("pause");
return 0;
}追问
看不懂
第3个回答 2014-02-08
首先我想知道你这样做的目的是什么?因为圆周率后面的72小数网上也可以查到,而且你这里面的难点不在计算,而在需要使用自己的数据类型表达72位小数。追问
我自己写了一个,但只输出了16位,所以就问了下。我用的是一个公式
代码如下:
双精度浮点数(double)是计算机使用的一种数据类型,使用 64 位(8字节) 来存储一个浮点数。 它可以表示十进制的15或16位有效数字,参考
所以你这样做最多只能输出16位小数,而不是你使用%74.72f进行输出就可以有72位小数的。而且想达到那么高的精度你的积分区间得划分得足够精细才行,不然连算出来的那16位也不一定是准确的。至于划分到多精细能在C语言中进行数值计算达到16位的小数精度我也不太会算,你可以参考数值计算方面的教材