C++でデムロ数(Demlo Number)を求める方法:1, 11, 111…の平方数
このチュートリアルでは、デムロ数(Demlo Number)について学びます。
デムロ数とは、1、11、111、1111…といった「1」だけで構成される数(レピュニット)の平方として得られる数のことです。デムロ数は 1 2 3 4 5 … n-2 n-1 n n-1 n-2 … 5 4 3 2 1 という特徴的な形をしているため、非常に簡単に求めることができます。
ここでは、「1」だけで構成された数が与えられ、その数に対応するデムロ数を求めることを目標とします。具体例を見てみましょう。
入力: 1111111
出力: 1234567654321
解き方の手順
- 対象となる数を文字列形式で初期化します。
- デムロ数を格納するための空の文字列を用意します。
- 1 から数の長さ n まで繰り返し処理を行い、各数字を結果の文字列に追加していきます。
- 次に、n - 1 から 1 まで逆方向に繰り返し処理を行い、同様に数字を追加します。
- 最終的に完成したデムロ数を出力します。
この方法なら、実際に大きな数の掛け算を行う必要がなく、桁あふれ(オーバーフロー)の心配もありません。文字列操作だけで高速に計算できるのがポイントです。
C++での実装例
それでは、実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
string getDemloNumber(string str) {
int len = str.length();
string demloNumber = "";
for (int i = 1; i <= len; i++) {
demloNumber += char(i + '0');
}
for (int i = len - 1; i >= 1; i--) {
demloNumber += char(i + '0');
}
return demloNumber;
}
int main() {
string str = "1111111";
cout << getDemloNumber(str) << endl;
return 0;
}実行結果
上記のコードを実行すると、次のような出力が得られます。
1234567654321
まとめ
このように、デムロ数は単純なパターンに従っているため、ループ処理と文字列操作を組み合わせるだけで簡単に生成できます。入力が「1」のみで構成されていることが前提となるため、実装の際にはその点に注意してください。
このチュートリアルについて質問がある場合は、コメント欄でお気軽にお尋ねください。
-
C++で16進数を10進数に変換するプログラムの作成方法
16進数が入力として与えられたとき、その16進数を10進数に変換するのが本記事のテーマです。 コンピュータにおける16進数は基数16で表現され、10進数は基数10で表現されます。10進数では0〜9の数字のみを使用しますが、16進数では0〜15までの値を扱うことができ、10以上の値はそれぞれA(10)、B(11)、C(12)、D(13)、E(14)、F(15)という英字で表されます。 16進数から10進数への変換手順 16進数を10進数に変換するには、以下の手順に従います。 右端の桁から順に数字を取り出し、0から始まるべき乗を掛けていきます。指数は「桁数 − 1」になるまで1ずつ増やします。
-
C++で正方形の面積を求めるプログラムの書き方
本記事では、正方形の一辺が与えられたときに、その一辺をもとに正方形の面積を計算して出力するC++プログラムを紹介します。 正方形とは 正方形とは、4つの辺と4つの角(すべて90度)を持つ2次元の平面図形であり、すべての辺の長さが等しいという特徴があります。言い換えれば、正方形とは「すべての辺の長さが等しい長方形」の一種であるとも言えます。 正方形のイメージは以下の通りです。 正方形の面積 = 一辺 × 一辺 入力例と出力例 入力:6 出力:36 一辺が6なので、出力は 6×6=36 となります。 入力:12 出力:144 アルゴリズム 処理の流れは以下のようになります。 関数 int m