アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは
K&Rを読んでいるのですが、p.107の演算4-12の問題の意味がよくわかりません。

演算4-12
printdのアイデアを使ってitoaの再帰版を書け。すなわち、再帰ルーチンを呼ぶことによって整数を文字列に変換せよ。


(以下、p.105より)
いま、数字を文字列として印字する関数を考えよう。すでに述べたように(p.77)数字は逆順生成される。すなわち、低い桁の数字が高い桁の数字より先に得られるが、印字するときは反対にしなければならない。この問題には二つの解がある。

一つは生成した順に配列に格納し、3.6節のitoaでしたように、逆順に印字する方法である。配列の初期値式が指定された数より少ないときには、外部変数、静的変数、自動変数については、残りの要素は0となる。

もう一つの方法は再帰を使う解法で、任意の先行する数字に対処するのにprintdでそれ自身を呼び、それから後尾の数字を印字すればよい。ただこの版でも、最大の負の数には対処できない。

#include <stdio.h>

/* printd: n を10進で印字 */
void printd(int n)
{
  if ( n < 0 ) {
    putchar('-');
    n = -n;
    }
    if ( n / 10 )
      printd(n / 10);
      putchar(n % 10 + '0');
}


自分としては、itoaの再帰版がprintdだと思うのですが、printd以外にitoaの再帰版があるのでしょうか?

演算4-13 の方はできたのですが、演算4-12 の方がわからなくて、悩んでいます。

演算4-13
文字列 s をその場所で逆順にする関数reverse(s)の再帰版を書け。

A 回答 (1件)

えぇと, どこに混乱をきたすところがあるのかよくわからんのですが....


「数値を表示する」ことと「数値を文字列化する」こととは違うよね.
    • good
    • 0
この回答へのお礼

なるほど、仰るとおりですね。
わかりました!
どうもありがとうございました!

お礼日時:2009/11/28 20:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!