CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): doldori (돌돌이)
날 짜 (Date): 2007년 10월 18일 목요일 오후 02시 27분 40초
제 목(Title): Re: 모듈로 문제 2


어거지로 한다면 이렇게도 되겠습니다만..

printf("a=%*s%*d.%1d%%\n",
        a >=       0 ? 0 :
        a >     -100 ? 5 :
        a >    -1000 ? 4 :
        a >   -10000 ? 3 :
        a >  -100000 ? 2 : 1, a >= 0 ? "" : "-",
        a >=       0 ? 6 :
        a >     -100 ? 1 :
        a >    -1000 ? 2 :
        a >   -10000 ? 3 :
        a >  -100000 ? 4 : 5, abs(a)/10, abs(a)%10);

별로 마음에 들지 않죠? 한 줄도 아니고... ^^

일반화된 버전은

const int IntegralWidth = 6;
int w = log10(fabs(a));
printf("a=%*s%*d.%1d%%\n",
        a >= 0 ? 0             : a > -100 ? IntegralWidth - 1 : IntegralWidth - w, a >= 0 ? "" : "-",
        a >= 0 ? IntegralWidth : a > -100 ? 1                 : w                , abs(a)/10, abs(a)%10);

그러나 이것도 제 눈에는 obfuscation에 가깝군요.
그냥 double로 캐스팅하는 것이 제일 편하겠네요.
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.