double형의 432.342를 문자열로..

sangeon의 이미지

바꾸는 프로그램을 짜려고 한다면.. 어떻게 해야 할까요? ㅜㅜ..

물론 다른 함수를 사용하지 않고 말이죠.. sprintf나 gvct함수 등등..

아무런 함수도 사용하지 않고..

고수님들.. ^^ 도움을 주세요~

죠커의 이미지

과제로 내기 적합한 문제같군요. 답은 생략하고 힌트만 적어봅니다. 방금 생각해 본 간단한 아이디어는 다음과 같습니다.

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]
}
익명 사용자의 이미지

sangeon wrote:
바꾸는 프로그램을 짜려고 한다면.. 어떻게 해야 할까요? ㅜㅜ..

물론 다른 함수를 사용하지 않고 말이죠.. sprintf나 gvct함수 등등..

아무런 함수도 사용하지 않고..

고수님들.. ^^ 도움을 주세요~

ㅁㅇㄻㅇㄻ

실러캔스의 이미지

일반적인 실수형은 부호/지수/유효숫자부분 으로 비트 영역을 분할하여 수치를 저장합니다. (정확히 몇 비트씩 차지하고 있는지는 기억이 안나네요.. 조금만 검색해 보시면 나올 겁니다)

부호 부분으로 -를 붙여주느냐 안붙여주느냐를 결정하면 되고,
유효숫자 부분과 지수 부분은 (void *로 캐스팅한 후) 비트연산으로 추출하면 되는데, 유효숫자들 사이에 소수점을 출력할 자리를 지수부분을 이용하여 결정해 주면 되겠네요. 단, 여기서 10진수를 문자열로 바꾸는 루틴을 따로 작성하실 수도 있고, 내장 함수를 사용하실 수도 있을 겁니다.

즐잠~ 나도 자야지

익명 사용자의 이미지

CN wrote:
과제로 내기 적합한 문제같군요. 답은 생략하고 힌트만 적어봅니다. 방금 생각해 본 간단한 아이디어는 다음과 같습니다.

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;
}

이런식으로 말이죠...val은 입력받은 실수가 되겠죠?

그리고 문자열로 변환할때 길이또한 검사해 줘야 할거 같네요..

mirr의 이미지

웁스..로그인 안했네

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.