投稿日: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乗
頑張って貯金したいと思います。
最後までお読みいただき、ありがとうございます。