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

C言語で整数に含まれるすべての0を1に置き換えるプログラム

問題

与えられた整数の中にあるすべての「0(ゼロ)」を「1」に置き換えるプログラムを作成します。

入力として整数が与えられたとき、その数値に含まれる0をすべて1へ置き換えて出力するのが目的です。

解決策

以下の具体例で考えてみましょう。

入力が 102410 の場合、出力は 112411 となります。

アルゴリズム

整数内の0をすべて1に置き換えるための手順は以下の通りです。

ステップ1: ユーザーから整数を入力として受け取ります。
ステップ2: 整数を1桁ずつ走査します。
ステップ3: 「0」の桁が見つかったら、「1」に置き換えます。
ステップ4: 置き換え後の整数を出力します。

処理のポイント

このプログラムでは再帰関数を利用しています。「number % 10」で最下位の桁を取り出し、それが0なら1に変更したうえで、「replace(number / 10)」によって残りの上位の桁を再帰的に処理し、結果を10倍して桁を組み立てていく仕組みです。

サンプルコード

与えられた整数内の0をすべて1に置き換えるCプログラムは以下の通りです。

#include<stdio.h>
int replace(long int number){
   if (number == 0)
   return 0;
   // 最下位の桁を確認し、必要なら置き換える
   int digit = number % 10;
   if (digit == 0)
   digit = 1;
   // 残りの桁を変換し、最下位の桁と連結する
   return replace(number/10) * 10 + digit;
}
int Convert(long int number){
   if (number == 0)
      return 1;
   else
      return replace(number);
}
int main(){
   long int number;
   printf("\nEnter any number : ");
   scanf("%d", &number);
   printf("\nAfter replacement the number is : %dn", Convert(number));
   return 0;
}

なお、long int 型の変数を読み込む場合は、書式指定子として %ld を使用する方が安全です。大きな値を扱う際には注意してください。

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

Enter any number: 1056110010
After replacement the number is: 1156111111

このように、入力された数値に含まれる0がすべて1に置き換えられて表示されます。

  1. 【C言語】テキスト内の単語を別の指定した単語に置き換えるプログラムの作り方

    この記事では、3つの文字列 text(元のテキスト)、oldWord(置き換え対象の単語)、newWord(新しい単語)が与えられたとき、テキスト内の単語を別の指定した単語にすべて置き換えるCプログラムの作成方法を解説します。プログラムは、テキスト内に存在する oldWord の出現箇所をすべて検索し、それぞれを newWord で置き換えた結果を出力します。問題を理解するための具体例入力text = I am learning programming oldWord = learning newWord = practicing出力I am practicing programmingこの例

  2. 数値を英語の単語に変換するCプログラムの書き方

    数値で構成された文字列が与えられたとき、その数値を英語の単語(スペル表記)へ変換するのが本記事の課題です。例えば、入力が「361」であれば、出力は「Three hundred sixty one」となるようにします。この問題を解くためには、一の位・十の位・百の位・千の位など、それぞれの数字がどの桁に位置しているのかを意識することが重要です。なお、今回紹介するコードは最大4桁、つまり0から9999までの数値に対応しています。したがって、入力は0〜9999の範囲である必要があります。例として「1,111」を考えてみましょう。各桁は以下のように対応します。千の位:1(one thousand)百の位