我正在编写一个程序,可以计算高于 unsigned long long 的两个幂。基本上,我希望程序运行,然后在最后显示数字,但程序只有在每次乘以 2 后显示数字时才有效。这是工作方式的代码:
#include <iostream>
#include <stdio.h>
#include <climits>
using namespace std;
class big {
public:
short container[SHRT_MAX];
void print() {
digits();
for (; length != 0; length --) {
cout << container[length - 1];
}
cout << "\n";
}
unsigned int digits() {
if (!length) {
for (length = 0; ; length++) {
if (container[length] == '\0' &&container[length + 1] == '\0' && container[length + 2] == '\0' && container[length + 3] == '\0' && container[length + 4] == '\0') break;
}
}
return length;
}
private:
unsigned int length;
};
int numDigits(int number)
{
int digits = 0;
if (number < 0) digits = 1;
while (number) {
number /= 10;
digits++;
}
return digits;
}
int main(int argc, const char * argv[])
{
big result;
unsigned short tempResult;
unsigned short carry = 0;
result.container[0] = 1;
for (int i = 0; i < 65536; i++) {
cout << "[" << i+1 << "]\t";
if (i < 9) {
cout << "\t";
}
carry = 0;
unsigned int length = result.digits();
for (int k = 0; k < length; k++) {
tempResult = result.container[k] * 2 + carry;
carry = 0;
if (numDigits(tempResult) == 2) {
carry = 1;
result.container[k] = tempResult - 10;
if (!result.container[k+1] && !result.container[k+2] && !result.container[k+3] && !result.container[k+4]) {
result.container[k+1] += carry;
}
}
else {
result.container[k] = tempResult;
}
}
result.print();
}
}
我想result.print()
在程序结束后运行,而不是在运行时运行。我知道该怎么做,但是当我把result.print()
输出放在循环之外时6
,没有别的了。任何帮助将不胜感激,如果您需要澄清,请提出问题。