[C언어] 정수의 자릿수를 세는 프로그램

ET의 공부/C언어|2020. 4. 14. 21:14

안녕하세요 오늘은 정수의 자릿수를 세는 프로그램을 만드는 방법에 대해 포스팅하려 합니다.

 

 

정수의 자릿수 세기.1 

첫 번째 방법은 while문과 나눗셈 연산을 사용해서 구하는 방법입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdio.h"
 
int main()
{
    int n;
    int count = 0;
    printf("\n정수입력: ");
    scanf("%d"&n);
    while(n != 0)
    {
        n = n/10;
        ++count;
    }
    printf("\n자릿수: %d\n", count);
    
    return 0;
}
 

 

c언어의 나눗셈(/) 연산은 나머지는 버리게 됩니다. (Ex. 9/10  => 0) 이를 이용하여 10으로 나눈 값이 0이 아니라면 count를 증가시켜서 자릿수를 셀수 있습니다. 

 

 

정수의 자릿수 세기.2

 

 

두 번째 방법은 재귀함수를 이용한 방법입니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "stdio.h"
 
int number_of_digits(int n)
{
    if(n == 0){
        return 0;
    }
    while(n != 0)
    {
        return 1 + number_of_digits(n/10);
    }
    return 0;
}
 
int main(void)
{
    int n;
 
    printf("\n정수입력: ");
    scanf("%d"&n);
 
    printf("\n자릿수: %d\n", number_of_digits(n));
    
    return 0;
}
 

 

나눗셈을 이용하여 자릿수를 구한다는 점은 위의 방법과 차이가 없습니다.

 

 

정수의 자릿수 세기.3

 

세 번째 방법은 log를 이용한 방법입니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdio.h"
#include "math.h"
int number_of_digits(int n)
{
    return floor(log10(n)+1);
}
 
int main(void)
{
    int n;
 
    printf("\n정수입력: ");
    scanf("%d"&n);
 
    printf("\n자릿수: %d\n", number_of_digits(n));
    
    return 0;
}
 

 

math.h 함수를 포함하여 floor()와 log10() 을 사용하였습니다. floor는 내림 함수이고 log10은 사용로그 입니다.

로그는

 

314를 예를 들면 log10^2 는 2이므로 남고 3.14부분은 floor함수로 버리게 됩니다. return floor(log10(n)+1); 에서 1을 더해주므로

자릿수 3을 구할 수 있습니다.

 

 

감사합니다.

댓글()