起初这是C++老师,布置的道题,做了3天 也没做出来,最后还是听别人的意见改的,原因是自己的想法太复杂了 ,而且 乘法还是没学好,没用过这样的乘法,也不知道,
自己太菜鸡了!!!
废话不多说了,开始吧
题目:解决高位数的阶乘问题,例如50的阶乘
分析:无论是用int 还是long long 最终结果还是会越界,导致输出异常。;
直接丢代码
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <string.h>
#include <cmath>
using namespace std;
int a[1001];
int solo(int a[])
{
int j;
for(int i=1000;i>=0;i--)
{
if(a[i]!=0)
{
j=1000-i+1;
break;
}
}
return j;
}
int main()
{
memset(a,0,sizeof(a));
int n;
a[0]=1;
cin>>n;
if(n==0)
{
cout<<1<<endl;
return 0;
}
if(n==1)
{
cout<<1<<endl;
return 0;
}
for(int i=2; i<=n; i++)
{
int sum=0;
int Q=0;
int zz=solo(a);
while(1)
{
int z=i*a[Q]+sum;
int t=0;
if(z>=10)
{
a[Q]=z%10;
sum=z/10;
}
else
{
a[Q]=z;
sum=0;
}
Q++;
if(Q>=zz&&t==0)
break;
}
}
int zzz;
for(int i=1000;i>=0;i--)
{
if(a[i]!=0)
{
zzz=i;
break;
}
}
for(int i=zzz;i>=0;i--)
cout<<a[i];
}
忘记在代码上加注释了!! 唉 坏毛病
调用的solo函数:
举例:
在10的阶乘里面,算11的阶乘的时候,10的阶乘是个很大的数,最里层的那个while循环 需要确定一下循环几次,solo函数就是确定次数的,他通过读取已有的a数组中元素最后一位的坐标,来确定到底占用了多少个数组内存了,从而确定 i 值乘多少遍。
其余的没什么好解释的了 垃圾算法 欢迎交流Q:690217293