数値を逆順に並べ替えるC++プログラムの書き方と解説
数値の反転とは、その桁の数字を逆の順序に並べ替えて格納することを指します。
例えば、元の数値が6529である場合、出力として9256が表示されます。
以下に、数値を反転させるC++プログラムの例を示します。
サンプルプログラム
#include <iostream>
using namespace std;
int main() {
int num = 63972, rev = 0;
while(num > 0) {
rev = rev*10 + num%10;
num = num/10;
}
cout<<"Reverse of number is "<<rev;
return 0;
}
実行結果
Reverse of number is 27936
プログラムの解説
上記のプログラムでは、反転対象となる数値63972を変数numに格納し、反転結果を変数revに保存しています。プログラムの中核となるロジックはwhileループの中にあり、このループはnumが0より大きい限り繰り返し実行されます。
whileループの各反復処理では、まずrevに10を掛けた値に「numを10で割った余り(num % 10)」を加え、その結果を改めてrevに代入します。これにより、numの一番下の桁がrevの上位の桁として順番に追加されていきます。同時に、各反復ごとにnumを10で割ることで、処理済みの桁を取り除いています。
この一連の処理は、次のコードスニペットで表されます。
while(num > 0) {
rev = rev*10 + num%10;
num = num/10;
}
処理の流れを具体例で確認
初期値num = 63972の場合、ループは以下のように進みます。
- 1回目:rev = 0 × 10 + 2 = 2、num = 6397
- 2回目:rev = 2 × 10 + 7 = 27、num = 639
- 3回目:rev = 27 × 10 + 9 = 279、num = 63
- 4回目:rev = 279 × 10 + 3 = 2793、num = 6
- 5回目:rev = 2793 × 10 + 6 = 27936、num = 0
最終的に、revにはnumの数値を反転させた27936が格納され、numの値は0になってループが終了します。その後、coutによってrevの値が出力されます。
cout<<"Reverse of number is "<<rev;
実装時の注意点
この手法は基本的に正の整数を前提としています。負の数を扱う場合は、あらかじめ絶対値を取得して反転処理を行い、最後に符号を付け直す必要があります。また、反転後の値がint型の最大値(2147483647)を超える可能性がある場合は、オーバーフロー対策としてlong long型を使用するか、処理前に桁数をチェックすることをおすすめします。
-
【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 となり
-
C++で数の奇数の約数(奇因子)の合計を求めるプログラム
正の整数が与えられたとき、その数の奇数の約数(奇因子)をすべて求め、それらの合計を計算するのが本プログラムの目的です。 例 入力: number = 20 出力: 奇数の約数の合計は: 6 入力: number = 18 出力: 奇数の約数の合計は: 13 例えば number = 20 の場合、約数は 1, 2, 4, 5, 10, 20 ですが、このうち奇数は 1 と 5 のみです。したがって、結果 = 1 + 5 = 6 となります。 プログラムで使用するアプローチ 奇数の約数の合計を計算する対象の数を入力する 偶数の約数を除外するため、まず数を2で割り切れる限り2で割り続け、奇数の部