#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+OBriVk5LmXOiAiLCBpKTsKICAgICAgICBwcmludF9yZXN1bHQocmVzdWx0KTsgIC8vIOioiOeul+e1kOaenOOCkuWPs+ipsOOCgeOBp+ihqOekugogICAgfQoKICAgIHJldHVybiAwOwp9CgovLyAz44Gu57Sv5LmX44KS6KiI566X44GX44GmcmVzdWx044Gr5qC857SN44GZ44KL6Zai5pWwCnZvaWQgcG93ZXIzKHVuc2lnbmVkIGxvbmcgcmVzdWx0W10pIHsKICAgIHVuc2lnbmVkIGxvbmcgY2FycnkgPSAwOyAgLy8g57mw44KK5LiK44GM44KK44KS5L+d5oyB44GZ44KL5aSJ5pWwCiAgICBmb3IgKGludCBpID0gMDsgaSA8IERJR0lUUzsgaSsrKSB7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wID0gcmVzdWx0W2ldICogMyArIGNhcnJ5OwogICAgICAgIHJlc3VsdFtpXSA9IHRlbXAgJSBCQVNFOyAgLy8g54++5Zyo44Gu5qGB44GrN+ahgeS7peWGheOBruWApOOCkuagvOe0jQogICAgICAgIGNhcnJ5ID0gdGVtcCAvIEJBU0U7ICAvLyDnubDjgorkuIrjgYzjgorliIbjgpLmrKHjga7moYHjgavlm57jgZkKICAgIH0KfQoKLy8gcmVzdWx044Gu5Lit6Lqr44KS6KGo56S644GZ44KL6Zai5pWwCnZvaWQgcHJpbnRfcmVzdWx0KHVuc2lnbmVkIGxvbmcgcmVzdWx0W10pIHsKICAgIGludCBzdGFydCA9IERJR0lUUyAtIDE7CgogICAgLy8g5LiK5L2N44Gu44K844Ot44KS44K544Kt44OD44OX44GZ44KLCiAgICB3aGlsZSAoc3RhcnQgPiAwICYmIHJlc3VsdFtzdGFydF0gPT0gMCkgewogICAgICAgIHN0YXJ0LS07CiAgICB9CgogICAgLy8g5pyA5LiK5L2N44Gu5qGB44KS6KGo56S677yI44K844Ot5Z+L44KB44GX44Gq44GE77yJCiAgICBwcmludGYoIiVsdSIsIHJlc3VsdFtzdGFydF0pOwoKICAgIC8vIOaui+OCiuOBruahgeOCkuOCvOODreWfi+OCgeOBl+OBpuihqOekugogICAgZm9yIChpbnQgaSA9IHN0YXJ0IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBwcmludGYoIiUwN2x1IiwgcmVzdWx0W2ldKTsgIC8vIDfmoYHjgafooajnpLoKICAgIH0KICAgIAogICAgLy8g6KGo56S644GX44Gf57WQ5p6c44KS5bmF44Gr5ZCI44KP44Gb44Gm5Y+z6Kmw44KB44Gr44GZ44KLCiAgICBpbnQgcHJpbnRlZF9sZW5ndGggPSAwOwogICAgcHJpbnRlZF9sZW5ndGggKz0gcHJpbnRmKCIlbHUiLCByZXN1bHRbc3RhcnRdKTsgIC8vIOacgOS4iuS9jeahgeOCkuOCq+OCpuODs+ODiAogICAgZm9yIChpbnQgaSA9IHN0YXJ0IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBwcmludGVkX2xlbmd0aCArPSBwcmludGYoIiUwN2x1IiwgcmVzdWx0W2ldKTsgIC8vIOaui+OCiuOBruahgeOCkuOCq+OCpuODs+ODiAogICAgfQogICAgCiAgICAvLyDlv4XopoHjgavlv5zjgZjjgabjgrnjg5rjg7zjgrnjgpLov73liqDjgZfjgablj7PoqbDjgoHjgpLlrp/nj74KICAgIGZvciAoaW50IGkgPSBwcmludGVkX2xlbmd0aDsgaSA8IFdJRFRIOyBpKyspIHsKICAgICAgICBwcmludGYoIiAiKTsKICAgIH0KCiAgICBwcmludGYoIlxuIik7Cn0KCg==