fork download
  1. #include <stdio.h>
  2. #define MAX_DIGITS 50 // 配列要素の数、桁数に対応
  3.  
  4. // 各要素に割り当てる桁の最大値(7桁まで)
  5. #define BASE 10000000
  6.  
  7. // resultの初期化(3^0 = 1を設定)
  8. void initialize(unsigned long result[]) {
  9. result[0] = 1; // 初期値として一番下の桁に1をセット
  10. for (int i = 1; i < MAX_DIGITS; i++) {
  11. result[i] = 0; // 残りの桁をすべて0に初期化
  12. }
  13. }
  14.  
  15. // 3の累乗を計算し、配列に格納する関数
  16. void power3(unsigned long result[], int n) {
  17. for (int i = 0; i < n; i++) {
  18. unsigned long carry = 0; // 繰り上げ用の変数
  19. for (int j = 0; j < MAX_DIGITS; j++) {
  20. unsigned long temp = result[j] * 3 + carry; // 3倍して繰り上げを加える
  21. result[j] = temp % BASE; // 現在の桁に収まる部分(7桁以内)
  22. carry = temp / BASE; // 8桁目に溢れた部分は繰り上げ用に保持
  23. }
  24. }
  25. }
  26.  
  27. // 配列の中身を表示する関数
  28. void print_result(unsigned long result[]) {
  29. // 最上位の非0桁を探す
  30. int start = MAX_DIGITS - 1;
  31. while (start > 0 && result[start] == 0) {
  32. start--;
  33. }
  34.  
  35. // 最上位桁を表示
  36. printf("%lu", result[start]);
  37.  
  38. // 残りの桁を7桁ずつ0埋めで表示
  39. for (int i = start - 1; i >= 0; i--) {
  40. printf("%07lu", result[i]); // 7桁の0埋めで表示
  41. }
  42. printf("\n");
  43. }
  44.  
  45. int main() {
  46. unsigned long result[MAX_DIGITS]; // 各要素が7桁まで扱える配列
  47.  
  48. // 初期値をセット
  49. initialize(result);
  50.  
  51. // 3の99乗を計算
  52. power3(result, 99);
  53. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty