投稿日:2024年8月16日

先日、家内とこんな話をしました。

1日目は1円。2日目は2円。3日目は4円。4日目は8円、以降、16、32、64、128…と、毎日、倍々に貯金したら30日後にはいくら貯まるの?
倍にした金額だけではなく前日までの金額の累計で30日後にいくら貯まるか知りたい。
または、1日目は1円。2日目は2円。3日目は3円、以降、4、5、6、7、8、9…。と経過日数だけ増額した場合も30日後にはいくら貯まるの?

1、2、4、8、16、32、64、128、512…。
2倍づつ繰り返し得られる数値を2の冪(にのべき。英語だとpowe of two)と言います。
入力した数値(366まで)から2の冪累計の金額
1、2、3、4、5、6、7、8…のように等差数列の累計を求めるプログラムを作ってみました。

 2の冪

▲数値は366まで入力できます。
▼ソースコードです。

// 入力した数値を取得
$(".btn").click(function () { //ボタンクリック
  $("table tr:not(:first)").empty(); //最初にth以外を削除
  let inputVal = $(".inputDays").val();
  if (inputVal == "" || inputVal.match(/[^0-9]/)) { //空欄か数値以外だったらアラートを表示。
    alert("数値を入力してください。");
  } else if (inputVal > 366) { // 366より大きな数値だったらアラートを表示。
    alert("366までの数値を入力してください。");
  }

  for (i = 0; i < inputVal; i++) {
    let days = i + 1; //日数
    let pot = Math.pow(2, i); //冪乗
    let total = pot + Math.pow(2, i - 1) * 2 - 1; //累計

    $("table").append( //table内に表示
      "<tr><td>" +
        days +
        "日目</<th><td>" +
        pot.toLocaleString() + //3桁おきにカンマ
        "円</td><td>" +
        total.toLocaleString() +
        "円</td></tr>"
    );
  }
  $(".inputDays").val("");
});

▲10行目、入力した数値分繰り返します。20と22行目のtoLocaleString()は3桁おきにカンマを配置する関数になります。

 等差数列の累計

▲数値は366まで入力できます。
▼ソースコードです。

// 入力した数値を取得
$(".btn").click(function () {
  $("table tr:not(:first)").empty(); //最初にth以外を削除
  let inputVal = $(".inputDays").val();
  if (inputVal == "" || inputVal.match(/[^0-9]/)) {
    alert("数値を入力してください。");
  } else if (inputVal > 366) {
    alert("366までの数値を入力してください。");
  }

  let n = 0;
  for (i = 0; i < inputVal; i++) {
    let days = i + 1; //日数(等差数列)
    n = n + i + 1; //累積

    $("table").append(
      //table内に表示
      "<tr><td>" +
        days +
        "日目</<th><td>" +
        days.toLocaleString() + //3桁おきにカンマ
        "円</td><td>" +
        n.toLocaleString() +
        "円</td></tr>"
    );
  }

  $(".inputDays").val("");
});

▲11〜14行目のロジックが違うだけです。

まとめ

ちょっと一息とは言いつつ、簡単にできると思いましたが、難しかったです。
結果をみて計算方法を考えたりと、けっこう、試行錯誤しました。

2の冪の累計は天文学的数値になります。
この0の数では単位の最大よりも上回っており呼び名がありません。
JavaScriptも計算しきれません。

参考までに呼び名を掲載しておきます。

一 いち 1
十 じゅう 10
百 ひゃく 100
千 せん 1000
万 まん 10000
億 おく 10の8乗
兆 ちょう 10の12乗
京 けい 10の16乗
垓 がい 10の20乗
𥝱 じょ 10の24乗
穣 じょう 10の28乗
溝 こう 10の32乗
澗 かん 10の36乗
正 せい 10の40乗
載 さい 10の44乗
極 ごく 10の48乗
恒河沙 ごうがしゃ 10の52乗
阿僧祇 あそうぎ 10の56乗
那由他 なゆた 10の60乗
不可思議 ふかしぎ 10の64乗
無量大数 むりょうたいすう 10の68乗

頑張って貯金したいと思います。

最後までお読みいただき、ありがとうございます。

Pocket