求大神解决?
或者告诉我应该解决什么问题?
怎样解决?
(学生一枚,求大神帮忙解决,!)
大数的问题:用字符数组去存储值
#include
#include
#include
#include
#include
#define maxs 10000
//数组的设置的大小,不能开太大,这样的话扫描的时间太长会超时,也不能太小。。。。
using namespace std;
int a[maxs];
int main()
{
int n,i,j,y;
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));//把数组全部设置为0
for(i=1,a[maxs-1]=1;i<=n;i++)//数组的高位存放数的低位,把最低位置成1,从1乘到n
{
y=0;//余数
for(j=maxs-1;j>=0;j--)
{
a[j]=a[j]*i+y;
y=a[j]/10000;//得到乘法之后的结果
a[j]=a[j]%10000;//得到进位
}
}
for(i=0;i<maxs;i++)//从左到右扫描,第一个不是0的跳出
if(a[i])break;
printf("%d",a[i++]);//输出第一个不是0的
for(j=i;j<maxs;j++)
printf("%04d",a[j]);//注意中间的数字,比如12,由于在数的中间要输出0012
printf("\n");
}
return 0;
可以使用递归函数,也可以使用循环实现。
1000的阶乘已经超出long long的范围,可以用高精度乘法。你可以先写两个大数相乘的函数,然后调用1000次这个函数就可以得到答案。注意:用数组保存结果。
这个不好算吧,数字已经超出了范围。怎么算得出来。
数组存储结果,估计30000位以内。可以考虑用位运算模式。
http://blog.csdn.net/u012685794/article/details/36411333
可以用递归。根据输入的值判断,如果等于1的话,输出结果,否则-1,递归调用。
int result = 1;
for(int i = 1;i<=num;i++)
{
result *=i;
}