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

数Nの先頭X桁と末尾X桁の絶対差を求める方法

ここでは、整数 N先頭X桁末尾X桁の絶対差を求める方法を解説します。解き方の流れは以下のとおりです。まず数値の桁数を求め、剰余演算子(%)を使って末尾X桁を取り出します。その後、10で割る操作を繰り返して先頭X桁以外の桁をすべて取り除き、最後に両者の差の絶対値を計算して結果を返します。

例として、N = 568424、X = 2 の場合を考えてみましょう。先頭2桁は「56」、末尾2桁は「24」であるため、差は 56 − 24 = 32 となります。

アルゴリズム

diffFirstLastDigits(N, X)

begin
    p := 10^X
    last := N mod p
    len := 桁数(N)
    while len ≠ X, do
        N := N / 10
        len := len - 1
    done
    first := N
    return |first - last|
end

このアルゴリズムでは、まず p = 10X を計算し、「N mod p」によって末尾X桁を取得します。続いて、桁数がXと等しくなるまでNを10で割り続けることで、先頭X桁だけを残します。最後に、先頭X桁と末尾X桁の差の絶対値を返します。

C++での実装例

#include <iostream>
#include <cmath>
using namespace std;

int lengthCount(int n){
    return floor(log10(n) + 1);
}

int diffFirstLastDigits(int n, int x) {
    int first, last, p, len;
    p = pow(10, x);
    last = n % p;
    len = lengthCount(n);
    while(len != x){
        n /= 10;
        len--;
    }
    first = n;
    return abs(first - last);
}

int main() {
    int n, x;
    cout << "Enter number and number of digits from first and last: ";
    cin >> n >> x;
    cout << "Difference: " << diffFirstLastDigits(n, x);
}

コードのポイント

  • lengthCount():底10の対数を利用して数値の桁数を効率的に求めます。floor(log10(n) + 1) により桁数が得られます。
  • pow(10, x) で10のx乗を計算し、n % p で末尾x桁を抽出します。
  • whileループ内で桁数がxになるまで n /= 10 を繰り返すことで、先頭x桁のみを取り出します。
  • abs() 関数を使い、先頭x桁と末尾x桁の差の絶対値を返します。

実行結果

Enter number and number of digits from first and last: 568424 2 
Difference: 32

入力として 568424 と 2 を与えると、先頭2桁「56」と末尾2桁「24」の差である 32 が出力されます。この手法は、剰余演算と整数除算という基本的な演算だけで実現できるため、桁数の多い数値に対してもシンプルかつ高速に処理できるのが特徴です。

  1. LinuxとGNU/Linuxの違いとは?初心者にも分かる徹底解説

    多くの人は、Linuxを多少触ったことがある人でさえ、Linux、GNU/Linux、そしてGNUツールチェーンの違いを正確には理解していません。しかし、特定のソフトウェアの依存関係を検討する場面では、これらの違いを把握しておくことが重要になります。この記事では、それぞれの成り立ちや役割の違いを、歴史的背景も交えながら分かりやすく解説します。LinuxとGNUは別物だったLinuxは、Unixから始まった一連の開発の流れを受け継いだOSです。そのため、Linuxの多くの部分はUnixの設計思想に基づいており、場合によってはUnix由来のコードが含まれていることもあります。一方、GNUは創設者の

  2. DirectX11とDirectX12の違いを徹底解説!ゲーマーが知っておくべきポイント

    DirectXは、ソフトウェアがマルチメディアコンテンツを描画し、グラフィックハードウェアと通信するために使用されるAPI(アプリケーションプログラミングインターフェース)のコレクションです。DirectXの主要な構成要素であるDirect3Dは、ソフトウェアとグラフィックスハードウェア間の通信を担っています。ハードウェアは製品ごとに異なるため、標準化された関数や呼び出しのライブラリを通じてグラフィックカードと通信することで、ゲーム開発を大幅にスピードアップできます。これは「ハードウェア抽象化」と呼ばれ、APIの最も重要な役割となっています。車に例えてみましょう。1台の車の運転ができれば、ほぼ