#include <stdio.h>
#define DIGITS 50 // 必要な桁数 (仮に50桁分の計算を行う)
#define BASE 10000000 // 7桁で分割する
#define WIDTH 48 // 3の99乗が48桁なので、それに合わせて幅を指定
void power3(unsigned long result[]);
void print_result(unsigned long result[]);
int main() {
unsigned long result[DIGITS] = {0}; // 各要素に初期値を設定
result[0] = 1; // 3の0乗 = 1 を初期値として設定
for (int i = 1; i <= 99; i++) {
power3(result); // 3倍を繰り返して累乗計算
print_result(result); // 計算結果を右詰めで表示
}
return 0;
}
// 3の累乗を計算してresultに格納する関数
void power3(unsigned long result[]) {
unsigned long carry = 0; // 繰り上がりを保持する変数
for (int i = 0; i < DIGITS; i++) {
unsigned long temp = result[i] * 3 + carry;
result[i] = temp % BASE; // 現在の桁に7桁以内の値を格納
carry = temp / BASE; // 繰り上がり分を次の桁に回す
}
}
// resultの中身を表示する関数
void print_result(unsigned long result[]) {
int start = DIGITS - 1;
// 上位のゼロをスキップする
while (start > 0 && result[start] == 0) {
start--;
}
// 最上位の桁を表示(ゼロ埋めしない)
// 残りの桁をゼロ埋めして表示
for (int i = start - 1; i >= 0; i--) {
printf("%07lu", result
[i
]); // 7桁で表示 }
// 表示した結果を幅に合わせて右詰めにする
int printed_length = 0;
printed_length
+= printf("%lu", result
[start
]); // 最上位桁をカウント for (int i = start - 1; i >= 0; i--) {
printed_length
+= printf("%07lu", result
[i
]); // 残りの桁をカウント }
// 必要に応じてスペースを追加して右詰めを実現
for (int i = printed_length; i < WIDTH; i++) {
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIERJR0lUUyA1MCAgICAgICAgICAvLyDlv4XopoHjgarmoYHmlbAgKOS7ruOBqzUw5qGB5YiG44Gu6KiI566X44KS6KGM44GGKQojZGVmaW5lIEJBU0UgMTAwMDAwMDAgICAgICAvLyA35qGB44Gn5YiG5Ymy44GZ44KLCiNkZWZpbmUgV0lEVEggNDggICAgICAgICAgIC8vIDPjga45OeS5l+OBjDQ45qGB44Gq44Gu44Gn44CB44Gd44KM44Gr5ZCI44KP44Gb44Gm5bmF44KS5oyH5a6aCgp2b2lkIHBvd2VyMyh1bnNpZ25lZCBsb25nIHJlc3VsdFtdKTsKdm9pZCBwcmludF9yZXN1bHQodW5zaWduZWQgbG9uZyByZXN1bHRbXSk7CgppbnQgbWFpbigpIHsKICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0W0RJR0lUU10gPSB7MH07ICAvLyDlkITopoHntKDjgavliJ3mnJ/lgKTjgpLoqK3lrpoKICAgIHJlc3VsdFswXSA9IDE7ICAvLyAz44GuMOS5lyA9IDEg44KS5Yid5pyf5YCk44Go44GX44Gm6Kit5a6aCgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gOTk7IGkrKykgewogICAgICAgIHBvd2VyMyhyZXN1bHQpOyAgLy8gM+WAjeOCkue5sOOCiui/lOOBl+OBpue0r+S5l+ioiOeulwogICAgICAgIHByaW50ZigiM+OBriUyZOS5lzogIiwgaSk7CiAgICAgICAgcHJpbnRfcmVzdWx0KHJlc3VsdCk7ICAvLyDoqIjnrpfntZDmnpzjgpLlj7PoqbDjgoHjgafooajnpLoKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKLy8gM+OBrue0r+S5l+OCkuioiOeul+OBl+OBpnJlc3VsdOOBq+agvOe0jeOBmeOCi+mWouaVsAp2b2lkIHBvd2VyMyh1bnNpZ25lZCBsb25nIHJlc3VsdFtdKSB7CiAgICB1bnNpZ25lZCBsb25nIGNhcnJ5ID0gMDsgIC8vIOe5sOOCiuS4iuOBjOOCiuOCkuS/neaMgeOBmeOCi+WkieaVsAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBESUdJVFM7IGkrKykgewogICAgICAgIHVuc2lnbmVkIGxvbmcgdGVtcCA9IHJlc3VsdFtpXSAqIDMgKyBjYXJyeTsKICAgICAgICByZXN1bHRbaV0gPSB0ZW1wICUgQkFTRTsgIC8vIOePvuWcqOOBruahgeOBqzfmoYHku6XlhoXjga7lgKTjgpLmoLzntI0KICAgICAgICBjYXJyeSA9IHRlbXAgLyBCQVNFOyAgLy8g57mw44KK5LiK44GM44KK5YiG44KS5qyh44Gu5qGB44Gr5Zue44GZCiAgICB9Cn0KCi8vIHJlc3VsdOOBruS4rei6q+OCkuihqOekuuOBmeOCi+mWouaVsAp2b2lkIHByaW50X3Jlc3VsdCh1bnNpZ25lZCBsb25nIHJlc3VsdFtdKSB7CiAgICBpbnQgc3RhcnQgPSBESUdJVFMgLSAxOwoKICAgIC8vIOS4iuS9jeOBruOCvOODreOCkuOCueOCreODg+ODl+OBmeOCiwogICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiByZXN1bHRbc3RhcnRdID09IDApIHsKICAgICAgICBzdGFydC0tOwogICAgfQoKICAgIC8vIOacgOS4iuS9jeOBruahgeOCkuihqOekuu+8iOOCvOODreWfi+OCgeOBl+OBquOBhO+8iQogICAgcHJpbnRmKCIlbHUiLCByZXN1bHRbc3RhcnRdKTsKCiAgICAvLyDmrovjgorjga7moYHjgpLjgrzjg63ln4vjgoHjgZfjgabooajnpLoKICAgIGZvciAoaW50IGkgPSBzdGFydCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgcHJpbnRmKCIlMDdsdSIsIHJlc3VsdFtpXSk7ICAvLyA35qGB44Gn6KGo56S6CiAgICB9CiAgICAKICAgIC8vIOihqOekuuOBl+OBn+e1kOaenOOCkuW5heOBq+WQiOOCj+OBm+OBpuWPs+ipsOOCgeOBq+OBmeOCiwogICAgaW50IHByaW50ZWRfbGVuZ3RoID0gMDsKICAgIHByaW50ZWRfbGVuZ3RoICs9IHByaW50ZigiJWx1IiwgcmVzdWx0W3N0YXJ0XSk7ICAvLyDmnIDkuIrkvY3moYHjgpLjgqvjgqbjg7Pjg4gKICAgIGZvciAoaW50IGkgPSBzdGFydCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgcHJpbnRlZF9sZW5ndGggKz0gcHJpbnRmKCIlMDdsdSIsIHJlc3VsdFtpXSk7ICAvLyDmrovjgorjga7moYHjgpLjgqvjgqbjg7Pjg4gKICAgIH0KICAgIAogICAgLy8g5b+F6KaB44Gr5b+c44GY44Gm44K544Oa44O844K544KS6L+95Yqg44GX44Gm5Y+z6Kmw44KB44KS5a6f54++CiAgICBmb3IgKGludCBpID0gcHJpbnRlZF9sZW5ndGg7IGkgPCBXSURUSDsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIgIik7CiAgICB9CgogICAgcHJpbnRmKCJcbiIpOwp9Cgo=