C言語の反復処理(whileループ)で数値を逆順に出力する方法
問題
C言語において、反復処理(whileループ)を使って、入力された数値を逆順に出力するにはどうすればよいのでしょうか?本記事では、その具体的な実装方法を解説します。
解決策
これまでの記事では、文字列関数を使用する場合と使用しない場合の、文字列を反転する方法を見てきました。今回は、あらかじめ用意されたライブラリ関数に頼らず、数値を反転して出力する方法を紹介します。
アルゴリズム
入力 − プログラムの実行時に数値を入力します。
手順1: 変数 number と reverse を宣言する
手順2: reverse を 0 で初期化する
手順3: number > 0 の間、次の処理を繰り返す
(a) reverse = reverse * 10 + number % 10;
(b) number を 10 で割る
手順4: reverse を返すこのアルゴリズムのポイントは、「number % 10」で末尾の桁を1桁ずつ取り出し、「reverse * 10」で桁を左にずらしてから加算することで、数値を下位の桁から順に組み立てていく点です。さらに「number / 10」により処理済みの桁を取り除き、すべての桁を処理し終えるまで繰り返します。
サンプルコード
#include <stdio.h>
int reverse(int number){
int reverse = 0;
while(number > 0){
reverse = reverse * 10 + number % 10;
number = number / 10;
}
return reverse;
}
int main(){
int number;
printf("数値を入力してください:");
scanf("%d", &number);
printf("逆順の数値は %d です", reverse(number));
getchar();
return 0;
}このプログラムでは、ユーザーから入力を受け取った数値を reverse() 関数に渡し、whileループ内で剰余演算と除算を組み合わせることで桁を逆順に並べ替えています。
実行結果
数値を入力してください:356789 逆順の数値は 987653 です
-
C言語の再帰を使って連結リストの末尾からk個のノードを表示する方法
本記事では、再帰(リカーシブ)アプローチを用いて、連結リスト(リンクリスト)の末尾からk個のノードを表示する方法を解説します。 再帰的アプローチとは、関数が終了条件を満たすまで自分自身を繰り返し呼び出し、その過程で結果を保持していく手法のことです。連結リストは前方へのポインタしか持たないため、末尾側から処理を行いたい場合には再帰が特に有効です。 例えば、リストが 29、34、43、56、88 というノードを持っており、k の値が 2 である場合、出力は末尾から 2 個のノード、つまり「88」と「56」になります。 実行例 連結リスト: 29->34->43->56->
-
C言語で連結リストの交互ノードを出力する方法(反復法)
この問題では、与えられた連結リストから交互のノードを出力するプログラムを作成します。つまり、1つ飛ばしでノードを表示していく処理を、反復法(イテレーティブな手法)を用いて実装します。 反復法とは、条件が真(true)である限り繰り返し実行されるループを使用する手法のことです。 例えば、リストに 29、34、43、56、88 というノードが格納されている場合、出力結果は交互ノードである 29、43、88 となります。 例 入力: 29->34->43->56->88 出力: 29 43 88 アプローチ 基本的な考え方は、リストを最後のノードまで走査するというものです。走