원주율 소수점n자리까지 출력하기

조회수 914회

안녕하세요. 입력: n가 25이내로 입력되고, 출력: 원주율소수점아래부터 n자리까지 출력 이있습니다.

#include <stdio.h>
int main() {
    int n;
    char py[30] = "3.14159265358979323846264";
    scanf("%d", &n);
    n += 2; //"3."여기부분이 2글자이기때문에 n에 2를 추가합니다.
    for (int i = 0; i < n; i++) {
        printf("%c", py[i]);
    }
    return 0;
}

위코드와 같이 문자열로 바꾸면서 출력하는방법은 반복문말고도 다양하게 있습니다. 하지만 실수형태로 출력하는걸로 제가 생각한방법은

#include <stdio.h>
int main() {
    int n;
    double py = 3.14159265358979323846264;
    scanf("%d", &n);
    printf("%.%df", n, py);
    return 0;
}

이런것입니다. 당연히 실패했고 %df가 출력되었습니다.(%.%두게연속으로 있어서 "%"가 이스케이프했습니다. "."는 출력되지않고.) 소수점 ~까지출력은 정수로는 가능하지만 변수로는 무리일까요? 아니면 출력하기전에 잘라버릴까요? 귀찮은질문해서 죄송합니다.

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    #include <stdio.h>
    
    int main()
    {
    
        double pi = 3.14159265358979323846264;
        int i;
    
        for (i = 0; i < 15; i++)
            printf("%.*lf\n", i, pi);
    
        return 0;
    }
    
    3
    3.1
    3.14
    3.142
    3.1416
    3.14159
    3.141593
    3.1415927
    3.14159265
    3.141592654
    3.1415926536
    3.14159265359
    3.141592653590
    3.1415926535898
    3.14159265358979
    

    https://docs.microsoft.com/en-us/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=msvc-160#precision-specification

    If the precision specification is an asterisk (*), an int argument from the argument list supplies the value. In the argument list, the precision argument must precede the value that's being formatted, as shown in this example:

    printf( "%.*f", 3, 3.14159265 ); /* 3.142 output */

    • 이거 좋은 기능인데 까먹고 있었네요. printf("%*.*f", 10, 4, py); 이런 식도 가능합니다. 알 수 없는 사용자 2021.4.21 12:33
    • 출력함수가 많이 있었네요. 감사합니다. noah0508 2021.4.22 08:03
  • printf 함수의 첫번째 인수는 문자열 형태면 됩니다. 직접 ""형태의 문자열을 넣어줘도 되지만, 배열에 저장된 문자열 등도 사용 가능합니다. 따라서 sprintf 함수로 미리 문자열을 적절히 만든 후에 그 문자열을 printf 함수에 넣어주시면 하고자 하는 것을 할 수 있습니다.

    아래 코드 참고하세요.

    #define _CRT_SECURE_NO_WARNINGS
    
    #include <stdio.h>
    
    int main()
    {
        double py = 3.14159265358979323846264;
        char format_str[20] = { 0, };
    
        int n;
        scanf("%d", &n);
    
        sprintf(format_str, "%%.%df", n);
    
        printf(format_str, py);
    
        return 0;
    }
    
    • 결과

    이미지

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다. sprintf부분의 "%%.%df"는 무슨뜻인가요? noah0508 2021.4.22 08:03
    • sprintf 함수는 첫 칸에 출력할 배열 주소를 적는 것 빼고는 printf 함수와 사용법이 동일합니다.%%는 %를 출력하라는 것이고, %d는 뒷항의 숫자가 십진수 형태로 출력하는 뜻이므로, n이 만약 3일 경우, "%%.%df", n의 결과는 "%.3f"가 됩니다. 알 수 없는 사용자 2021.4.22 16:10
    • 감사합니다. noah0508 2021.4.23 07:17

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)