Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

putchar()のみを使用してC言語でlong intを出力する方法

はじめに

ここでは、C言語においてputchar()関数のみを使ってlong int型の値を出力する方法を解説します。通常、変数の値を出力する際にはprintf()関数を利用すれば簡単ですが、今回は「putchar()以外の関数は使用できない」という制約が課されています。

ご存知のとおり、putchar()関数は1文字だけを出力できる関数です。そこで、この関数を活用して数値の各桁を1文字ずつ出力していきます。具体的には、数値から1桁を取り出した際に、文字'0'(ASCIIコード48)を加算することで、その数字に対応するASCII文字へと変換します。

実装のポイント

数値を桁ごとに出力するためには、再帰呼び出しを利用するのが効果的です。以下の手順で処理を行います。

  1. 値が0でないことを確認する
  2. 10で割った商(上位の桁)に対して自分自身を再帰的に呼び出す
  3. 10で割った余り(最下位の桁)に '0' を加えてputchar()で出力する

この方法により、最上位の桁から順番に正しく出力することができます。

サンプルコード

#include <stdio.h>
void print_long(long value) {
    if(value != 0) {
        print_long(value/10);
        putchar((value%10) + '0');
    }
}
main(void) {
    long a = 84571;
    print_long(a);
}

実行結果

84571

コードの解説

このプログラムの動作を詳しく見てみましょう。引数として渡されたlong型の値 84571 は、まず value/10 によって 8457 となり、再帰的に呼び出されます。この処理が繰り返され、値が 0 になった時点で再帰が終了します。その後、再帰の戻り過程で各桁が順に出力されるため、結果として「84571」が正しく表示されます。

注意点:負の数への対応

上記のコードは正の整数のみに対応しています。負の数にも対応させたい場合は、最初に値が負であるかどうかを判定し、負の場合は先頭にマイナス記号 '-' を出力したうえで、絶対値に対して同じ処理を行う必要があります。

まとめ

putchar()は1文字しか出力できませんが、再帰処理とASCIIコードへの変換を組み合わせることで、複数桁のlong int型の数値でも問題なく出力できることが分かりました。printf()が使えない組み込み環境などでのデバッグ出力など、実際の開発現場でも応用できるテクニックです。

  1. C#を使ってバイナリトライアングル(0と1の三角形)を出力する方法

    バイナリトライアングル(二進三角形)とは、0と1だけで構成された三角形のパターンのことです。これを作成するには、ネストしたforループ(二重ループ)を活用し、入力された行数に達するまで0と1を交互に出力していきます。ロジックのポイント出力の切り替えには、フラグ変数 a を使用します。a の値が「1」のときは「0」を表示して a を「0」に更新し、逆に a の値が「0」のときは「1」を表示して a を「1」に更新します。この処理を繰り返すことで、0と1が交互に並ぶパターンが生まれます。for (int i = 1; i <= n; i++) { for (int j = 1; j <=

  2. C#で文字列内の重複する文字を出力する方法【出現回数のカウントも解説】

    C#では、各文字の出現回数を配列でカウントすることで、文字列内に重複して含まれる文字を簡単に検出できます。ここでは、その基本的な実装手順をわかりやすく解説します。 実装の手順 1. char型の最大値を設定する まず、文字コードの範囲をカバーできるよう、char型の最大値(256)を静的変数として定義します。この値を配列のサイズとして使い、各文字の出現回数を格納します。 static int maxCHARS = 256; 2. 重複する文字を表示する 次に、対象となる文字列を用意し、各文字の出現頻度を計算した後、出現回数が2回以上の文字だけをコンソールに出力します。 String s = &