吃饱没事做之——计算阶乘

由于真的想挑战一下,然后遇到了瓶颈,这次我,遇到了瓶颈,多次遇到不是数字的符号,于是进行了修改修改,多次修改。

惯例,先贴代码。

#include <iostream>


class  decimal
{
private:
    int count;
public:
    int length;
    int len;
    int * del;
     decimal();
    int d_replace();
    int d_ride(int d_multiplier);
    int d_Power(int d_multiplier,int second);
    int d_output();
    int d_Factorial(int num);
};

 decimal:: decimal()
{
    count = 50;
    length = count;
    decimal::del = new int[length];
    del[0] = 1;
    len = 1;
}


int decimal :: d_replace()
{
    int * _del;
    length += count;
    std::cout << length << std::endl;
    _del = new int[length];
    count *= 2;
    for(int i = 0;i < len; i++)
    {
        _del[i] = del[i];
    }
    del = new int[length];
    for(int i = 0;i < len; i++)
    {
        del[i] = _del[i];
    }
    return 0;
}
int decimal :: d_ride(int d_multiplier)
{
    unsigned int i,transition = 0;
    for(int j = 0; j < len ;j++)
    {
        del[j] *= d_multiplier;
    }
    //d_output();
    for(int z = len-1;z >= 0; z--)
    {
        transition = del[z]/10;
        //std::cout << transition << std::endl;
        for(i = z;transition != 0; i++) 
        {
            if(i >= length - 1)d_replace();
            if(i >= len)
            {
                del[i] = 0;
                len = i + 1;
            }
            if(i != z)
                del[i] += transition;
            transition = del[i]/10;
            //std::cout << "123\t" << transition << "\t"<< (int)del[i] << "\t" << len << std::endl;
            del[i] %= 10;
            //std::cout << (int)del[i] << std::endl;
        }
    }
    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 decimal :: d_Factorial(int num)
{
    if(num < 0)
    {
        std::cout << "num error!" << std::endl;
        return 0;
    }
    if(num == 1 || num == 0)
    {
        del[0] = 1;
        return 0;
    }
    for(int i = num;i > 1; i--)
    {
        d_ride(i);
        //d_output();
        //std::cout << "123\t" << i << std::endl;
        //getchar();
    }
    return 0;
}

int main(int, char**) {
    decimal d;
    //d.d_Power(2,30000);
    d.d_Factorial(20000);
    d.d_output();
    return 0;
}

看我在里面printf断点了多少次,大概就知道我有多崩溃,数据量太大溢出,然后我用了另外的一种方法,来计算乘法。在时间和空间上我选择了要空间不要时间,然后时间复杂度刷刷刷就上升。

毕竟利用时间的话,连脑子都不用疼直接莽就行了。

写完,两个字,舒适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值