C言語で数値内の特定の桁を別の数字に置き換えるプログラム
整数 n が与えられたとき、その数値に含まれる特定の桁 x を、別の数字 m に置き換えるプログラムを考えます。手順としては、まず置き換えたい桁が数値の中に存在するかどうかを確認し、存在する場合にのみ、該当する桁 x を別の数字 m へと置き換えます。
たとえば、「123」という数値に対して、m を 5、置き換え対象の桁 x を「2」と指定した場合、結果は「153」になります。
入出力例
Input: n = 983, digit = 9, replace = 6 Output: 683 Explanation: 数値 983 の先頭の桁が 9 であるため、9 を 6 に置き換えた結果 683 となります。 Input: n = 123, digit = 5, replace = 4 Output: 123 Explanation: 数値 n の中に 5 という桁は存在しないため、結果は元の数値 n と同じになります。
アプローチ
今回使用するアプローチは以下のとおりです。
- 一の位(最下位の桁)から順に各桁を調べていきます。
- 置き換えたい桁が見つかったら、結果 res に (replace × d) を加算します。ここで d は桁の位置を表す重みで、初期値は 1 です。
- 該当する桁が見つからなかった場合は、元の桁をそのまま結果に加算します。
アルゴリズム
関数 int digitreplace(int n, int digit, int replace) ステップ1 → res=0 と d=1、および rem を宣言・初期化する ステップ2 → n が 0 になるまで while ループを繰り返す rem に n % 10 を代入する もし rem == digit ならば、 res に res + replace * d を代入する そうでなければ、 res に res + rem * d を代入する d *= 10 とし、n /= 10 とする ステップ3 → res を出力して終了する 関数 int main(int argc, char const *argv[]) ステップ1 → n = 983、digit = 9、replace = 7 を宣言・初期化する ステップ2 → 関数 digitreplace(n, digit, replace) を呼び出す 終了
C言語での実装例
#include <stdio.h>
int digitreplace(int n, int digit, int replace) {
int res = 0, d = 1;
int rem;
while(n) {
// 後ろの桁から余りを取り出す
rem = n % 10;
// 取り出した桁が置き換えたい桁と一致するか確認し、
// 一致していれば置き換える
if(rem == digit)
res = res + replace * d;
// 一致しない場合は、元の桁をそのまま res に格納する
else
res = res + rem * d;
d *= 10;
n /= 10;
}
printf("%d\n", res);
return 0;
}
// main関数
int main(int argc, char const *argv[]) {
int n = 983;
int digit = 9;
int replace = 7;
digitreplace(n, digit, replace);
return 0;
}
上記のコードを実行すると、以下の出力が得られます。
783
このように、数値を一の位から順に分解しながら桁ごとに判定して再構築することで、特定の桁だけを簡単に置き換えることができます。処理の計算量は数値の桁数に比例する O(log₁₀ n) となり、文字列を介さず算術演算だけで完結するため、非常に効率的な方法です。
-
【初心者向け】長方形の面積と外周を求めるC言語プログラムの書き方
長方形の「長さ」と「幅」が与えられたとき、その面積と外周(周囲の長さ)を計算する方法を、C言語のサンプルコード付きでわかりやすく解説します。 長方形とは? 長方形とは、4つの辺と4つの直角(90度)を持つ2次元の図形です。長方形では、隣り合う辺の長さは異なりますが、向かい合う辺どうしは必ず同じ長さになります。また、2本の対角線も互いに等しい長さを持ちます。 下の図は長方形を模式的に表したものです。 ここで、Aは長方形の幅(breadth)、Bは長さ(length)を表しています。 面積と外周の計算式 面積の公式 長方形の面積は、次の式で求められます。 面積 = 長さ × 幅 外周の公式
-
対角線の長さから正六角形の面積を求めるC++プログラム
この記事では、対角線の長さがわかっている場合に、正六角形の面積を計算する方法を解説します。ここでは対角線の長さを d とします。正六角形の内角はそれぞれ 120° であり、すべての内角の合計は 720° になります。対角線の長さが d のとき、面積は以下の公式で求められます。面積の公式正六角形の対角線 d を使った面積の式は次のとおりです。面積 = (3√3 × d²) / 8この式では、対角線の2乗に 3√3 を掛け、8 で割ることで面積が得られます。入力値が負の場合は無効な値として扱うため、プログラム側でチェックを行っています。サンプルコード(C++)#include <iostre