source

긴 인쇄 방법

factcode 2022. 8. 16. 23:16
반응형

긴 인쇄 방법

PI 바로 옆에 있는 프로그램을 하고 있는데 오래 쓰려고 하는데 작동이 안 돼요.여기 코드가 있습니다.

#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);

정말 못생겼어...적어도 휴대성은 있습니다.

    // acos(0.0) will return value of pi/2, inverse of cos(0) is pi/2 
    double pi = 2 * acos(0.0);
    int n; // upto 6 digit
    scanf("%d",&n); //precision with which you want the value of pi
    printf("%.*lf\n",n,pi); // * will get replaced by n which is the required precision
  • 당신의.scanf()사용할 필요가 있는 스테이트먼트%lld너무.
  • 루프에 종료 조건이 없습니다.
  • 식에 괄호가 너무 많고 공백이 너무 적습니다.

    pi += pow(-1.0, e) / (2.0*e + 1.0);
    
  • 루프의 첫 번째 반복에 1을 추가한 후 'pi' 값에 0을 추가해도 값은 크게 변경되지 않습니다.
  • 다음과 같은 명시적인 반환 유형을 사용해야 합니다.int위해서main().
  • 대체적으로, 다음 사항을 지정하는 것이 최선입니다.int main(void)비록 그것이 다른 것보다 단정적인 진술은 아니지만, 그것은 그것의 주장을 무시한다.
  • 나는 C99에서 부여된 명시적 라이선스를 싫어한다.main()내가 직접 쓰지 말고return 0;분명히 말하면.

이 알고리즘 전체가 의심스럽다고 생각합니다.long long; 데이터 타입은 다음과 같습니다.long double(와 함께)%Lf를 위해scanf()포맷, 그리고 아마%19.16Lf를 위해printf()포맷을 지정합니다.

우선 %d는 다음 중 하나의int

그렇게%1.16lld%d은(는) 정수이므로 의미가 없습니다.

당신이 하는 typedef도 불필요합니다.앞의 typedef를 사용하면 훨씬 읽기 쉬운 코드를 만들 수 있습니다.

사용하고 싶은 것은 다음과 같은 타입입니다.double, pi를 계산하고 다음을 사용합니다.%f또는%1.16f.

언급URL : https://stackoverflow.com/questions/6400180/how-to-printf-long-long

반응형