#include <stdio.h>
#define SIZE 8
#define BASE 10000000
// 関数プロトタイプ宣言(固定)
void power3(unsigned long result[], int exponent);
void print_result(unsigned long result[]);
int main(void) {
unsigned long result[SIZE] = {0}; // 結果の初期化
for (int i = 1; i <= 99; i++) {
power3(result, i);
print_result(result);
}
return 0;
}
void power3(unsigned long result[], int exponent) {
// 結果をゼロにリセット
for (int j = 0; j < SIZE; j++) {
result[j] = 0;
}
result[0] = 1; // 3の0乗は1
for (int i = 1; i <= exponent; i++) {
unsigned long carry = 0;
for (int j = 0; j < SIZE; j++) {
unsigned long tmp = result[j] * 3 + carry;
result[j] = tmp % BASE;
carry = tmp / BASE;
}
// 残った繰り上がりを処理
if (carry > 0) {
for (int j = SIZE - 1; j > 0; j--) {
result[j] = result[j - 1];
}
result[0] = carry;
}
}
}
void print_result(unsigned long result[]) {
int started = 0; // 先頭のゼロをスキップするためのフラグ
for (int i = SIZE - 1; i >= 0; i--) {
if (result[i] != 0) {
started = 1; // 最初の非ゼロ桁を見つけた
}
if (started) {
if (i < SIZE - 1) { // 先頭以外の桁には0を追加
} else {
printf("%lu", result
[i
]); // 先頭の桁はそのまま表示 }
}
}
if (!started) { // すべての桁がゼロの場合
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgOAojZGVmaW5lIEJBU0UgMTAwMDAwMDAKCi8vIOmWouaVsOODl+ODreODiOOCv+OCpOODl+Wuo+iogO+8iOWbuuWumu+8iQp2b2lkIHBvd2VyMyh1bnNpZ25lZCBsb25nIHJlc3VsdFtdLCBpbnQgZXhwb25lbnQpOwp2b2lkIHByaW50X3Jlc3VsdCh1bnNpZ25lZCBsb25nIHJlc3VsdFtdKTsKCmludCBtYWluKHZvaWQpIHsgCiAgICB1bnNpZ25lZCBsb25nIHJlc3VsdFtTSVpFXSA9IHswfTsgLy8g57WQ5p6c44Gu5Yid5pyf5YyWCgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gOTk7IGkrKykgewogICAgICAgIHBvd2VyMyhyZXN1bHQsIGkpOwogICAgICAgIHByaW50ZigiM14lZCA9ICIsIGkpOwogICAgICAgIHByaW50X3Jlc3VsdChyZXN1bHQpOwogICAgfQoKICAgIHJldHVybiAwOyAKfQoKdm9pZCBwb3dlcjModW5zaWduZWQgbG9uZyByZXN1bHRbXSwgaW50IGV4cG9uZW50KSB7CiAgICAvLyDntZDmnpzjgpLjgrzjg63jgavjg6rjgrvjg4Pjg4gKICAgIGZvciAoaW50IGogPSAwOyBqIDwgU0laRTsgaisrKSB7CiAgICAgICAgcmVzdWx0W2pdID0gMDsgCiAgICB9CiAgICByZXN1bHRbMF0gPSAxOyAvLyAz44GuMOS5l+OBrzEKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBleHBvbmVudDsgaSsrKSB7IAogICAgICAgIHVuc2lnbmVkIGxvbmcgY2FycnkgPSAwOwogICAgICAgIAogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgU0laRTsgaisrKSB7CiAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdG1wID0gcmVzdWx0W2pdICogMyArIGNhcnJ5OwogICAgICAgICAgICByZXN1bHRbal0gPSB0bXAgJSBCQVNFOwogICAgICAgICAgICBjYXJyeSA9IHRtcCAvIEJBU0U7CiAgICAgICAgfQoKICAgICAgICAvLyDmrovjgaPjgZ/nubDjgorkuIrjgYzjgorjgpLlh6bnkIYKICAgICAgICBpZiAoY2FycnkgPiAwKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBTSVpFIC0gMTsgaiA+IDA7IGotLSkgewogICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gcmVzdWx0W2ogLSAxXTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHRbMF0gPSBjYXJyeTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgcHJpbnRfcmVzdWx0KHVuc2lnbmVkIGxvbmcgcmVzdWx0W10pIHsKICAgIGludCBzdGFydGVkID0gMDsgLy8g5YWI6aCt44Gu44K844Ot44KS44K544Kt44OD44OX44GZ44KL44Gf44KB44Gu44OV44Op44KwCiAgICBmb3IgKGludCBpID0gU0laRSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgaWYgKHJlc3VsdFtpXSAhPSAwKSB7CiAgICAgICAgICAgIHN0YXJ0ZWQgPSAxOyAvLyDmnIDliJ3jga7pnZ7jgrzjg63moYHjgpLopovjgaTjgZHjgZ8KICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ZWQpIHsKICAgICAgICAgICAgaWYgKGkgPCBTSVpFIC0gMSkgeyAvLyDlhYjpoK3ku6XlpJbjga7moYHjgavjga8w44KS6L+95YqgCiAgICAgICAgICAgICAgICBwcmludGYoIiUwN2x1IiwgcmVzdWx0W2ldKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHByaW50ZigiJWx1IiwgcmVzdWx0W2ldKTsgLy8g5YWI6aCt44Gu5qGB44Gv44Gd44Gu44G+44G+6KGo56S6CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBpZiAoIXN0YXJ0ZWQpIHsgLy8g44GZ44G544Gm44Gu5qGB44GM44K844Ot44Gu5aC05ZCICiAgICAgICAgcHJpbnRmKCIwIik7CiAgICB9CiAgICBwcmludGYoIlxuIik7IC8vIOaUueihjAp9Cg==