【C++】中心付き九角数とその数列を生成するプログラムの書き方
はじめに
整数「n」が与えられたとき、n 番目の中心付き九角数(centered nonagonal number)を求めるとともに、n 項目までの中心付き九角数列を生成して結果を表示するのが本記事の課題です。
中心付き九角数とは?
中心付き九角数とは、中央に置かれた1個の点を中心として、その周囲に点で描かれる九角形の層が幾重にも積み重なって構成される数です。

上図は中心付き九角数 𝑁₂ を表したものです。この値は次の式を使って計算できます。
$$Nc(n)=\frac{(3n-2)(3n-1)}{2}$$
例えば n = 2 の場合、(3×2−2)×(3×2−1)/2 = 4×5/2 = 10 となり、数列の2番目の値と一致します。
入力
number: 20
出力
centered nonagonal number : 1711
入力
number: 10
出力
centered nonagonal series : 1 10 28 55 91 136 190 253 325 406
アルゴリズム
開始
ステップ1→ 中心付き九角数を計算する関数を宣言する
int calculate_number(int num)
return (3 * num - 2) * (3 * num - 1) / 2
ステップ2→ 中心付き九角数列を計算する関数を宣言する
int calculate_series(int num)
int i = 1; i <= num; i++ のループ処理
(3 * i - 2) * (3 * i - 1) / 2 を出力する
ループ終了
ステップ3→ main() 内で
int num = 20 を宣言する
calculate_number(num) を呼び出す
num = 10 を代入する
calculate_series(num) を呼び出す
終了サンプルコード(C++)
#include <bits/stdc++.h>
using namespace std;
// 中心付き九角数を計算する
int calculate_number(int num){
return (3 * num - 2) * (3 * num - 1) / 2;
}
// n 項目までの中心付き九角数列を出力する
int calculate_series(int num){
for (int i = 1; i <= num; i++){
cout << (3 * i - 2) * (3 * i - 1) / 2;
cout << " ";
}
}
int main(){
int num = 20;
cout<<"centered nonagonal number : "<<calculate_number(num)<<endl;
num = 10;
cout<<"centered nonagonal series : ";
calculate_series(num);
return 0;
}実行結果
上記のコードを実行すると、次のような出力が得られます。
centered nonagonal number : 1711 centered nonagonal series : 1 10 28 55 91 136 190 253 325 406
-
C++で10進数を16進数に変換するプログラムの作り方
10進数の数値が入力として与えられたとき、その数値を16進数に変換するのが本記事の目的です。 コンピュータの世界では、16進数は基数16で表現され、10進数は基数10で表現されます。10進数は0〜9の値を使って表されるのに対し、16進数は0〜15の数字を持ちます。そのうち10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、15は「F」として表されます。 10進数から16進数への変換手順 10進数を16進数に変換するには、以下の手順に従います。 まず、与えられた数値を変換先の基数で割ります。たとえば、6789を16進数に変換する場合、基数である16で6789を割り、商を求め
-
C++で10進数を2進数に変換するプログラムの書き方
コンピューターの内部では、すべてのデータが2進数(基数2)として扱われています。一方、私たちが日常的に使う10進数は「0〜9」の数字を組み合わせた基数10の記数法です。この記事では、C++を使って入力された10進数を2進数へ変換するプログラムの考え方と実装方法を解説します。10進数から2進数への変換手順10進数を2進数に変換する基本的な方法は、「2で割った余りを順番に記録していく」ものです。具体的には次の手順で行います。まず、変換したい数値を基数である2で割り、商と余りを求めます。余りが0であればその桁は「0」、1であれば「1」として記録します。続いて、得られた商をさらに2で割り、同じように余