如何长时间打印

我正在做一个aproximate程序,我试图用很长的时间,但它不工作。 这是代码

#include<stdio.h> #include<math.h> typedef long long num; main(){ num pi; pi=0; num e, n; scanf("%d", &n); for(e=0; 1;e++){ pi += ((pow((-1.0),e))/(2.0*e+1.0)); if(e%n==0) printf("%15lld -> %1.16lld\n",e, 4*pi); //printf("%lld\n",4*pi); } } 

%lld是标准的C99方法,但是这对我正在使用的编译器不起作用(mingw32-gcc v4.6.0)。 在这个编译器上做的方法是: %I64d

所以试试这个:

 if(e%n==0)printf("%15I64d -> %1.16I64d\n",e, 4*pi); 

 scanf("%I64d", &n); 

我知道以完全可移植的方式完成这一操作的唯一方法是使用<inttypes.h>的定义。

在你的情况下,它看起来像这样:

 scanf("%"SCNd64"", &n); //... if(e%n==0)printf("%15"PRId64" -> %1.16"PRId64"\n",e, 4*pi); 

这真的是非常丑陋的…但至less它是便携式的。

  • 您的scanf()语句也需要使用%lld
  • 你的循环没有终止条件。
  • expression式中有太多的括号和太less的空格

     pi += pow(-1.0, e) / (2.0*e + 1.0); 
  • 你在循环的第一次迭代中加一个,然后将零值赋给'pi'的值。 这并没有太大的改变。
  • 你应该为main()使用显式的int返回types。
  • 总的来说,最好是在忽略它的参数时指定int main(void) ,尽pipe这不像其他的那样是一个分类陈述。
  • 我不喜欢C99给出的显式许可,以省略main()的结束返回,而不是自己使用; 我写return 0; 明确。

我认为整个algorithmlong long书写时是可疑的; 数据types可能应该更像long doublescanf()格式为%Lfprintf()格式为%19.16Lf

首先,%d是一个int

所以%1.16lld没有意义,因为%d是一个整数

这种typedef你做的,也是不必要的,直接使用types,做一个更可读的代码。

你要使用的是typesdouble ,用于计算pi,然后使用%f%1.16f