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

【C++】数値を指定された数で割り切れる2つの部分に分割するプログラム

はじめに

このチュートリアルでは、与えられた数値を2つの部分に分割し、それぞれが指定された数で割り切れるようにできるかを判定するC++プログラムを作成します。

入力として、文字列形式で与えられる1つの数値と、2つの整数を受け取ります。プログラムは、この数値を「前半部分が1つ目の整数で割り切れ、後半部分が2つ目の整数で割り切れる」ように分割できるかどうかを調べ、可能であればその分割結果を出力します。

問題を解くための手順

  • 対象となる数値と、除算判定に使用する2つの整数を初期化します。
  • 数値の先頭から順に桁を追加し、前半部分が1つ目の数で割り切れるまで処理を繰り返します。
  • 各文字を数字に変換しながら数値を構築します。
  • 割り切れた時点でループを抜けます。
  • 続いて、その次のインデックスから後半部分の処理を開始します。
  • 前半部分と同じ要領で後半の数値を構築します。
  • 後半部分が2つ目の数で割り切れるかどうかを確認します。
  • 前半・後半の両方がそれぞれ対応する数で割り切れる場合はその結果を出力し、そうでない場合は「Not possible」を出力します。

コード例

実際のコードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;

void checkTheDivisabilityOfPrefixAndSuffix(string num, int prefix_dividend, int suffix_dividend) {
    int N = num.length();
    bool is_prefix_divisable = false, is_suffix_divisable = false;
    int index = 0;
    int prefix = num[index] - '0';
    while (index < N) {
        if (prefix % prefix_dividend == 0) {
            is_prefix_divisable = true;
            break;
        }
        prefix = prefix * 10 + (num[++index] - '0');
    }
    int suffix = num[++index] - '0';
    while (index < N - 1) {
        suffix = suffix * 10 + (num[++index] - '0');
    }
    if (suffix % suffix_dividend == 0) {
        is_suffix_divisable = true;
    }
    if (is_prefix_divisable && is_suffix_divisable) {
        cout << prefix << " " << suffix << endl;
    }
    else {
        cout << "Not possible" << endl;
    }
}

int main() {
    string number = "125333";
    int prefix_dividend = 5;
    int suffix_dividend = 3;
    checkTheDivisabilityOfPrefixAndSuffix(number, prefix_dividend, suffix_dividend);
    return 0;
}

実行結果

上記のコードを実行すると、次のような結果が得られます。

125 333

この例では、数値「125333」が「125」と「333」の2つの部分に分割されています。前半の「125」は5で割り切れ、後半の「333」は3で割り切れるため、条件を満たす分割が存在することになります。

まとめ

本チュートリアルでは、文字列として与えられた数値を、指定された2つの数でそれぞれ割り切れる前半と後半に分割する方法を解説しました。数値の桁を順に走査しながら前置部分と後置部分を独立に判定するシンプルなアプローチです。ご不明な点がある場合は、コメント欄でお気軽にお知らせください。

  1. C++で円を2つの部分に分割したときの角度差の最小値を求めるプログラム

    この記事では、円を構成する各部分(扇形)の角度が格納された配列が与えられたとき、それらを連続的につなぎ合わせて2つの部分に分割した場合の角度差の最小値を求めるC++プログラムを解説します。問題の概要円全体(360度)を構成するすべての部分の角度が配列として与えられます。これらの部分を連続する範囲ごとに結合して2つのグループを作り、それぞれのグループの角度の合計の差が最小になるようにします。重要なのは、離れた位置にある部分(例えば最初の部分と3番目の部分など)を一緒にすることはできないという点です。入力例で理解しましょう入力ang[] = {90, 45, 90, 135}出力90説明1つ目と2

  2. C++で2つの数値を加算するプログラムの書き方【サンプルコード付き】

    加算(足し算)は、最も基本的な算術演算の一つです。2つの数値を加算するプログラムは、指定された2つの数値の合計を計算し、その結果を画面に表示します。この記事では、C++で2つの数値を加算する方法を、変数を使った基本例と配列を使った応用例の2パターンに分けて解説します。例1:変数を使って2つの数値を加算するまずは、最もシンプルな方法です。2つの整数型変数を用意し、その合計を別の変数に格納して出力します。#include <iostream> using namespace std; int main() { int num1 = 15, num2 = 10, sum;