PL/SQLで数値の先頭と末尾の桁の合計を求める方法
問題の概要
この記事では、ある数値 n が与えられたとき、その先頭(最初)の桁と末尾(最後)の桁の合計を求めるプログラムを PL/SQL で作成します。
PL/SQL とは
PL/SQL は、SQL に手続き型プログラミング言語の機能(変数宣言・条件分岐・ループなど)を組み合わせた Oracle 社の拡張言語です。単純なクエリ実行にとどまらず、ロジックを持ったデータベース処理を記述できます。
具体例で理解しよう
- 入力: n = 31415
- 出力: 8
- 解説: 先頭の桁 = 3、末尾の桁 = 5 → 合計 = 8
解決のアプローチ
この問題を解くには、数値 n から先頭の桁と末尾の桁をそれぞれ取り出し、その合計を出力します。
- 先頭の桁:
SUBSTR()関数を使用して抽出します。SUBSTR は文字列を対象とするため、TO_CHAR()で数値を文字列に変換してから使います。 - 末尾の桁:
MOD(n, 10)を使うと、10 で割った余りとして簡単に取得できます。
また、数値が 1 桁の場合は先頭と末尾が同じ数字になるため、条件分岐でそのまま出力するようにします。
サンプルコード
DECLARE
n INTEGER := 31415;
firstDigit INTEGER := 0;
lastDigit INTEGER := 0;
s INTEGER;
BEGIN
IF n > 9 THEN
firstDigit := SUBSTR(TO_CHAR(n), 1, 1); -- 先頭の桁を取得
lastDigit := MOD(n, 10); -- 末尾の桁を取得
s := firstDigit + lastDigit;
ELSE
s := n; -- 1桁の場合はその値が答えになる
END IF;
DBMS_OUTPUT.PUT_LINE('数値の先頭の桁と末尾の桁の合計は ' || s);
END;
/
実行結果
数値の先頭の桁と末尾の桁の合計は 8
コードの解説
- 宣言部(DECLARE): 対象となる数値 n、先頭の桁・末尾の桁を格納する変数、合計を格納する変数 s を宣言します。
- 条件分岐(IF文): n が 9 より大きい(2 桁以上の)場合のみ桁の抽出を行い、それ以外は n 自体を結果とします。
- 先頭の桁の取得:
SUBSTR(TO_CHAR(n), 1, 1)により、文字列化した数値の 1 文字目を取り出します。 - 末尾の桁の取得:
MOD(n, 10)により、10 で割った余り=一番右の桁を取り出します。 - 結果の出力:
DBMS_OUTPUT.PUT_LINEで合計値を表示します。
このように、PL/SQL の基本的な構文と組み込み関数を組み合わせることで、桁の操作をシンプルかつ効率的に実装できます。
-
Pythonで数値の最初と最後のビットだけがセットされているかを判定する方法
問題の概要ある数値 n が与えられたとき、その2進表現において「最初(最上位)」と「最後(最下位)」の位置にのみビットがセットされている(1になっている)かどうかを判定します。例えば、入力が n = 17 の場合、2進表現は 10001 となり、最初と最後の位置にだけ 1 が存在するため、結果は True になります。解決のアプローチこの問題は、以下の手順で効率的に解くことができます。n が 1 と等しい場合は True を返します(2進表現が「1」のみで、最初と最後の位置が一致しているため)。それ以外の場合は、「n - 1 が 2 のべき乗であるか」を判定します。2のべき乗であれば True
-
【Python】桁の配列から最小の数を作り、先頭と末尾の桁でできる数が素数かどうか判定する方法
問題の概要 0〜9の数字だけを要素に持つ配列 digits が与えられます。まず、これらの桁をすべて使って作れる最小の数を求めます。次に、その数の先頭の桁と末尾の桁を組み合わせてできる2桁の数(順方向・逆方向の2通り)が素数かどうかを判定し、生成した数と素数の結果を出力します。 たとえば、入力が digits = [5, 2, 1, 7] の場合を考えてみましょう。桁を昇順に並べると最小の数は 1257 になります。先頭と末尾の桁は「1」と「7」なので、組み合わせは 17 と 71 の2つ。この2つはどちらも素数であるため、プログラムは 1257、17、71 を返します。 解法のアプローチ