Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

닌자고양이

[C/C++] 반복문 없이 정수의 10진수 자릿수 구하기 본문

C C++

[C/C++] 반복문 없이 정수의 10진수 자릿수 구하기

닌자고양이 2020. 10. 4. 19:56

반복문을 사용하면 이렇게 간단하게 작성할 수 있지만

int n;
int a = 1234567890;
 
for (n = 1; a > 9; n++)
    a /= 10;

printf("%d", n);

 

반복문이 없다면 if 문을 여러번 사용해야 한다.

int 형의 최대 값이 10자리 (2147483648) 이므로 9번 사용하면 되겠다.

 int n = 1;
 int a = 1234567890;
 
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
 if (a > 9) a /= 10, n++;
  
 printf("%d", n);

 

나눗셈은 빼고 if 문만 사용하는게 효율은 좋겠다.

int n;
int a = 1234567890;

if (a < 10) n = 1;
else if (a < 100) n = 2;
else if (a < 1000) n = 3;
else if (a < 10000) n = 4;
else if (a < 100000) n = 5;
else if (a < 1000000) n = 6;
else if (a < 10000000) n = 7;
else if (a < 100000000) n = 8;
else if (a < 1000000000) n = 9;
else n = 10;

printf("%d", n);

 

위의 if 문을 삼항 비교 연산자로 한 줄로 줄여볼까?

보기 좋은 코드는 아니지만 간혹 줄 수를 줄이고 싶을 때가 있다.

int a = 1234567890;
int n = a < 10 ? 1 : a < 100 ? 2 : a < 1000 ? 3 : a < 10000 ? 4 : a < 100000 ? 5 : a < 1000000 ? 6 : a < 10000000 ? 7 : a < 100000000 ? 8 : a < 1000000000 ? 9 : 10;

printf("%d", n);

 

Comments