닌자고양이
[C/C++] 반복문 없이 정수의 10진수 자릿수 구하기 본문
반복문을 사용하면 이렇게 간단하게 작성할 수 있지만
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);
'C C++' 카테고리의 다른 글
[C/C++] scanf 패턴 매칭 "%[charset]" (0) | 2021.03.12 |
---|---|
[C/C++] 문자열 이스케이프 시퀀스 (0) | 2021.03.12 |
[C/C++] 문자열 분리 (strpbrk, strtok, find_first_of 사용) (0) | 2020.10.03 |
[C++] ifstream 으로 텍스트 파일 읽는 방법들 (0) | 2020.09.20 |
[C/C++] UTF-8 텍스트 파일 읽는 방법들 (0) | 2020.09.18 |
Comments