我想起了之前做过的一件事情,计算2的30000次方,之后由于电脑坏了,所有东西都没了。
可恶呐!
但当时是用c写的,于是乎,我这次就用c++写了一下。
先贴一下代码
#include <iostream>
class decimal
{
private:
int count;
public:
int length;
int len;
char * del;
decimal();
int d_replace();
int d_ride(int d_multiplier);
int d_Power(int d_multiplier,int second);
int d_output();
};
decimal:: decimal()
{
count = 50;
length = count;
decimal::del = new char[length];
del[0] = 1;
len = 1;
}
int decimal :: d_replace()
{
char * _del;
length += count;
std::cout << length << std::endl;
_del = new char[length];
count *= 2;
for(int i = 0;i < len; i++)
{
_del[i] = del[i];
}
del = new char[length];
for(int i = 0;i < len; i++)
{
del[i] = _del[i];
}
return 0;
}
int decimal :: d_ride(int d_multiplier)
{
int i,transition = 0;
for(i = 0;i < len || transition != 0; i++)
{
if(i >= length - 1)d_replace();
if(i >= len)del[i] = 0;
del[i] *= d_multiplier;
del[i] += transition;
transition = del[i]/10;
del[i] %= 10;
//std::cout << (int)del[i] << std::endl;
}
len = i;
return 0;
}
int decimal :: d_Power(int d_multiplier,int second)
{
int transition = 0;
for(int i = 0;i < second; i++)
{
d_ride(d_multiplier);
}
return 0;
}
int decimal :: d_output()
{
char c = 0;
for(int i = len-1;i >=0 ; i--)
{
c = del[i] + 48;
putchar(c);
}
putchar('\n');
return 0;
}
int main(int, char**) {
decimal d;
d.d_Power(2,300000);
d.d_output();
return 0;
}
此代码是还没完全写好的,我本来是想写阶乘的,结果写着写着就写到了次方来了,还好次方容易实现。
之后可以加多一个函数。来计算阶乘,但这玩意说实话,就是我之前的思路,没有一点创新,怎么说呢?感觉写起来比以前简单多了?
以后遇到的bug挺多的
这次只遇到了一个delete 方法出现错误,然后一气之下,也不管了,直接删了它。
计算出了2的300000次方,时间有点久,这个2的300000次方的数值在我上一篇博客上。
哟,希望这个能让我的女孩子开心开心。