JavaScriptで数値を連続する奇数・偶数ごとに分割して配列として返す方法
問題
正の整数 n(n > 0)を引数として受け取り、その桁を「連続する奇数の並び」と「連続する偶数の並び」に分割した配列を返す JavaScript 関数を作成します。具体的には、数字を左から右へ読み進めながら、奇数から偶数へ(または偶数から奇数へ)切り替わる箇所で数値を区切ります。
たとえば入力が 124579 の場合、「1」は奇数、「24」は偶数、「579」は奇数であるため、出力は [1, 24, 579] となります。
解説
この問題は、次の手順で解くことができます。
- 数値を文字列化する:
String(num)で数値を文字列に変換すれば、各桁にインデックスでアクセスできるようになります。 - 隣り合う桁の偶奇を比較する: 直前の桁と現在の桁をそれぞれ 2 で割った余り(
% 2)が一致していれば、同じグループに属すると判断できます。 - グループを確定する: 偶奇が切り替わるタイミングで、それまで蓄積していた文字列を数値に変換して結果配列に追加し、新しいグループを開始します。
- 末尾の処理: ループ終了後も残っている文字列があれば、忘れずに結果配列へ追加します。
サンプルコード
const num = 124579;
const splitDifferent = (num = 1) => {
const str = String(num);
const res = [];
let temp = '';
for(let i = 0; i < str.length; i++){
const el = str[i];
if(!temp || +temp[temp.length - 1] % 2 === +el % 2){
temp += el;
}else{
res.push(+temp);
temp = el;
};
};
if(temp){
res.push(+temp);
temp = '';
};
return res;
};
console.log(splitDifferent(num));
出力
[ 1, 24, 579 ]
コードのポイント
+temp[temp.length - 1] % 2 === +el % 2の部分では、単項プラス(+)を使って文字を数値に変換し、偶奇を比較しています。- 条件式の
!tempにより、最初の桁は必ず一時バッファ(temp)に追加されるため、初期状態でも正しく動作します。 - 計算量は、桁数を n とすると時間・空間ともに O(n) で済むため、大きな数値に対しても効率的に処理できます。
-
条件文を使わずに偶数・奇数を判定して表示するC言語プログラム
この記事では、比較演算子(<、<=、!=、>、>=、==)などの条件文を一切使わずに、数値が偶数か奇数かを判定して表示する方法を解説します。 通常、偶数・奇数の判定は条件文を使えば簡単に行えます。数値を2で割り、余りが0であれば偶数、そうでなければ奇数と判定できます。また、数値と1のビットごとのAND演算を行い、結果が0なら偶数、1なら奇数と判定する方法も一般的です。 しかし今回は条件文が使えないため、少し工夫が必要です。ここでは、条件文なしで偶数・奇数を判定する2つの方法を紹介します。 方法1:配列のインデックスを利用する まず、文字列の配列を作成します。インデック
-
Pythonで数値が奇数か偶数かを判定する方法を解説
Pythonで数値が奇数か偶数かを判定する方法 Pythonでは、剰余演算子(%)を使うことで、数値が奇数か偶数かを簡単に判定できます。剰余演算子は「余り演算子」とも呼ばれ、ある数を別の数で割ったときの余りを求めるための演算子です。 判定の考え方はシンプルです。対象の数値を2で割り、その余りを確認します。余りが0であれば偶数、0以外(1)であれば奇数であると判断できます。 サンプルコード no = int(input(enter number)) if no % 2 == 0: print({} is even.format(no)) else: print({} is odd