fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4.  
  5. class Decimal
  6. {
  7. // (SIZE * KETA) 未満の整数を扱える
  8. static const int SIZE = 1000;
  9. static const unsigned long KETA = 10000;
  10. public:
  11. Decimal() { init(); }
  12. Decimal(unsigned long n) {
  13. init();
  14. int i = 0;
  15. while (n > 0) {
  16. value[i] = n % KETA;
  17. n /= KETA;
  18. i++;
  19. }
  20. }
  21. Decimal(const Decimal& v) {
  22. for (int i = 0; i <= SIZE; i++) {
  23. value[i] = v.value[i];
  24. }
  25. }
  26. Decimal operator + (const Decimal& add) {
  27. Decimal sum(add);
  28. for (int i = 0; i < SIZE; i++) {
  29. sum.value[i] += value[i];
  30. sum.value[i + 1] += sum.value[i] / KETA;
  31. sum.value[i] %= KETA;
  32. }
  33. if (sum.value[SIZE] > 1) {
  34. sum.value[SIZE] = 1;
  35. }
  36. return sum;
  37. }
  38. Decimal operator * (const Decimal& mul) {
  39. Decimal pdt;
  40. for (int i = 0; i < SIZE; i++){
  41. for (int j = 0; i + j < SIZE; j++) {
  42. pdt.value[i + j] += value[i] * mul.value[j];
  43. }
  44. pdt.value[i + 1] += pdt.value[i] / KETA;
  45. pdt.value[i] %= KETA;
  46. }
  47. if (pdt.value[SIZE] > 1) {
  48. pdt.value[SIZE] = 1;
  49. }
  50. return pdt;
  51. }
  52. Decimal& operator += (const Decimal& add) {
  53. for (int i = 0; i < SIZE; i++) {
  54. value[i] += add.value[i];
  55. value[i + 1] += value[i] / KETA;
  56. value[i] %= KETA;
  57. }
  58. if (value[SIZE] > 1) {
  59. value[SIZE] = 1;
  60. }
  61. return *this;
  62. }
  63. Decimal& operator *= (const Decimal& mul) {
  64. Decimal tmp(*this);
  65. init();
  66. for (int i = 0; i < SIZE; i++){
  67. for (int j = 0; i + j < SIZE; j++) {
  68. value[i + j] += tmp.value[i] * mul.value[j];
  69. }
  70. value[i + 1] += value[i] / KETA;
  71. value[i] %= KETA;
  72. }
  73. if (value[SIZE] > 1) {
  74. value[SIZE] = 1;
  75. }
  76. return *this;
  77. }
  78. void print() const {
  79. int f = 0;
  80. for (int i = SIZE; --i >= 0; ) {
  81. if (f == 0) {
  82. if (value[i] == 0) {
  83. continue;
  84. }
  85. f = 1;
  86. cout << value[i];
  87. } else {
  88. printf("%04d", value[i]);
  89. }
  90. }
  91. if (f == 0) {
  92. putchar('0');
  93. }
  94. if (value[SIZE] != 0) {
  95. cout << "[OF]";
  96. }
  97. }
  98. void println() const {
  99. print();
  100. cout << endl;
  101. }
  102.  
  103. private:
  104. void init() {
  105. for (int i = 0; i <= SIZE; i++) {
  106. value[i] = 0;
  107. }
  108. }
  109. unsigned long value[SIZE + 1];
  110. };
  111.  
  112. int main() {
  113. unsigned long n = 0xFFFFFFFFUL;
  114. Decimal val1(n);
  115. Decimal val2(val1);
  116. Decimal val3(val1 + val2);
  117. Decimal val4, val5, val6;
  118. Decimal val7(10000002), val8, val9;
  119. cout << n << endl;
  120. val1.println();
  121. val2.println();
  122. val3.println();
  123. val4 = val1 + val2 + val3;
  124. val4.println();
  125. val5 = val1 + 100000001;
  126. val5.println();
  127. val6 = val4 + val4 + val4 + val4;
  128. val6.println();
  129. val7 = val7 * val7 * val7 * val7;
  130. val8 = val7 * val7 * val7;
  131. val8 = val8 * val8 * val8 * val8;
  132. val8 = val8 * val8 * val8;
  133. val7.println();
  134. val8.println();
  135. val9 += 100;
  136. val9 += 200;
  137. val9.println();
  138. val9 = Decimal(111111111) * Decimal(7);
  139. val9.println();
  140. val9 = 111111111;
  141. val9 *= 3;
  142. val9.println();
  143. return 0;
  144. }
Success #stdin #stdout 0.01s 3344KB
stdin
Standard input is empty
stdout
4294967295
4294967295
4294967295
8589934590
17179869180
4394967296
68719476720
10000008000002400000320000016
1000028800411843898779486355523442138122805999438668934509434808639102314135448784068560592759728033208606662285112035734891709381787906299660147259225924955385342037255466107941379806829157122499843369364910727721551487057834091548272335167972122345931503673435449691552736565096819755567526480189333304175063490034495228750991655103766339526558986174118310362239731363619445968881433251139920776305126918094156008051631805696221355402409565676738672942235276496298497146650133268587017719037252861272750711053970685139316163665641444827437097870428717126782622495191096500080958068673801836334585204283411787172670476153191225955427754251958245778253832359408137445362910290851218764711095677454505791030455450676845556327540365188729863636098721738491152107902522774980720403522362174546217400374174710305979647049649003168432049204645333412895591906703872724696887373211041948571180164330580690745210728196774631199970408603985434289655972449366521680475347173048981873795595103531369897635354261025980416
300
777777777
333333333