과제로 내기 적합한 문제같군요. 답은 생략하고 힌트만 적어봅니다. 방금 생각해 본 간단한 아이디어는 다음과 같습니다.
1. 10의 제곱들을 연속으로 만들어 비교해봅니다. (10 < n, 100 < n, 1000 < n or 1.0/10 < n, 1.0 / 100 < n) 그렇게 하면 "자리 수"를 알 수 있습니다. 거의 이진 탐색과 비슷한 형태의 함수가 나올 것입니다.
2. 자리수를 알고나면 각 자리마다 나누기(혹은 곱셈)와 casting, 나머지 연산을 적절히 이용해서 수를 구해냅니다. for나 while으로 반복하면 될 것입니다.
3. 각 자리의 수를 문자로 변환합니다. 이 단계는 2번의 for나 while 안에 같이 들어가면 될 것입니다.
4. 얻어 낸 문자를 모두 합쳐 string을 만듭니다. 이것 역시 2번의 for나 while안에 같이 넣으면 될 것입니다.
* 2번에 대해 보충을 하자면 1300에서 100의 자리를 얻기위해서는 (1300/100) % 10 등의 방법이 있을 것입니다.
* 3번을 해결할 간단하며 이식성 높은 표준 코드는 아래가 되겠군요.
일반적인 실수형은 부호/지수/유효숫자부분 으로 비트 영역을 분할하여 수치를 저장합니다. (정확히 몇 비트씩 차지하고 있는지는 기억이 안나네요.. 조금만 검색해 보시면 나올 겁니다)
부호 부분으로 -를 붙여주느냐 안붙여주느냐를 결정하면 되고,
유효숫자 부분과 지수 부분은 (void *로 캐스팅한 후) 비트연산으로 추출하면 되는데, 유효숫자들 사이에 소수점을 출력할 자리를 지수부분을 이용하여 결정해 주면 되겠네요. 단, 여기서 10진수를 문자열로 바꾸는 루틴을 따로 작성하실 수도 있고, 내장 함수를 사용하실 수도 있을 겁니다.
과제로 내기 적합한 문제같군요. 답은 생략하고 힌트만 적어봅니다. 방금 생각해 본 간단한 아이디어는 다음과 같습니다.
1. 10의 제곱들을 연속으로 만들어 비교해봅니다. (10 < n, 100 < n, 1000 < n or 1.0/10 < n, 1.0 / 100 < n) 그렇게 하면 "자리 수"를 알 수 있습니다. 거의 이진 탐색과 비슷한 형태의 함수가 나올 것입니다.
2. 자리수를 알고나면 각 자리마다 나누기(혹은 곱셈)와 casting, 나머지 연산을 적절히 이용해서 수를 구해냅니다. for나 while으로 반복하면 될 것입니다.
3. 각 자리의 수를 문자로 변환합니다. 이 단계는 2번의 for나 while 안에 같이 들어가면 될 것입니다.
4. 얻어 낸 문자를 모두 합쳐 string을 만듭니다. 이것 역시 2번의 for나 while안에 같이 넣으면 될 것입니다.
* 2번에 대해 보충을 하자면 1300에서 100의 자리를 얻기위해서는 (1300/100) % 10 등의 방법이 있을 것입니다.
* 3번을 해결할 간단하며 이식성 높은 표준 코드는 아래가 되겠군요.
Quote:
char int2char(int n) {
return "0123456789"[i]
}
로그의 개념을 이용해도 될듯 하군요..
do
{
retval++;
val /= 10.0;
}
while (val >= 1.0);
return retval;
}
과제로 내기 적합한 문제같군요. 답은 생략하고 힌트만 적어봅니다. 방금
과제로 내기 적합한 문제같군요. 답은 생략하고 힌트만 적어봅니다. 방금 생각해 본 간단한 아이디어는 다음과 같습니다.
1. 10의 제곱들을 연속으로 만들어 비교해봅니다. (10 < n, 100 < n, 1000 < n or 1.0/10 < n, 1.0 / 100 < n) 그렇게 하면 "자리 수"를 알 수 있습니다. 거의 이진 탐색과 비슷한 형태의 함수가 나올 것입니다.
2. 자리수를 알고나면 각 자리마다 나누기(혹은 곱셈)와 casting, 나머지 연산을 적절히 이용해서 수를 구해냅니다. for나 while으로 반복하면 될 것입니다.
3. 각 자리의 수를 문자로 변환합니다. 이 단계는 2번의 for나 while 안에 같이 들어가면 될 것입니다.
4. 얻어 낸 문자를 모두 합쳐 string을 만듭니다. 이것 역시 2번의 for나 while안에 같이 넣으면 될 것입니다.
* 2번에 대해 보충을 하자면 1300에서 100의 자리를 얻기위해서는 (1300/100) % 10 등의 방법이 있을 것입니다.
* 3번을 해결할 간단하며 이식성 높은 표준 코드는 아래가 되겠군요.
- 죠커's blog / HanIRC:#CN
Re: double형의 432.342를 문자열로..
ㅁㅇㄻㅇㄻ
일반적인 실수형은 부호/지수/유효숫자부분 으로 비트 영역을 분할하여 수
일반적인 실수형은 부호/지수/유효숫자부분 으로 비트 영역을 분할하여 수치를 저장합니다. (정확히 몇 비트씩 차지하고 있는지는 기억이 안나네요.. 조금만 검색해 보시면 나올 겁니다)
부호 부분으로 -를 붙여주느냐 안붙여주느냐를 결정하면 되고,
유효숫자 부분과 지수 부분은 (void *로 캐스팅한 후) 비트연산으로 추출하면 되는데, 유효숫자들 사이에 소수점을 출력할 자리를 지수부분을 이용하여 결정해 주면 되겠네요. 단, 여기서 10진수를 문자열로 바꾸는 루틴을 따로 작성하실 수도 있고, 내장 함수를 사용하실 수도 있을 겁니다.
즐잠~ 나도 자야지
[quote="CN"]과제로 내기 적합한 문제같군요. 답은 생략하고 힌트
로그의 개념을 이용해도 될듯 하군요..
이런식으로 말이죠...val은 입력받은 실수가 되겠죠?
그리고 문자열로 변환할때 길이또한 검사해 줘야 할거 같네요..
웁스..로그인 안했네
웁스..로그인 안했네
내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.
댓글 달기