您的位置:程序门 -> c/c++ -> c++ 语言



请各位帮忙看看,为什么会这样呢


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请各位帮忙看看,为什么会这样呢[已结贴,结贴人:micnoone]
发表于:2007-03-29 15:05:57 楼主
编写一个可以容纳四十位数得球n!得程序,我的程序是下面这样的:可是在运行时29!竟然等于0117...........,同时弹 出对话框说内存 不能被写,不知道哪儿出现问题,请高手提出
#include <stdio.h>

void   main()
{
int   data[40];
int   digit;
int   n;
int   i,j,r,k;

for(i=1;i <41;i++)
data[i]=0;
        data[0]=1;
data[1]=1;
digit=1;


printf( "enter   a   number ");

       
scanf( "%d ",&n);


for(i=1;i <n+1;i++)


{
for(j=1;j <digit+1;j++)
data[j]*=i;

for(j=1;j <digit+1;j++)
{
if(data[j]> 10)

{
for(r=1;r <digit+1;r++)

{
if(data[digit]> 10)
digit++;
data[r+1]+=data[r]/10;
data[r]=data[r]%10;
}
}
}
printf( "%d!= ",i);
for(k=digit;k> 0;k--)
printf( "%d ",data[k]);
printf( "\n ");


}
}


发表于:2007-03-29 15:09:321楼 得分:20
你先找个计算器看看29!有多少位吧。
发表于:2007-03-29 15:13:242楼 得分:0
我使用数组来储存数据的
发表于:2007-03-29 15:15:283楼 得分:0
你再算算你的数组够不够存那么多位吧。
发表于:2007-03-29 15:20:334楼 得分:0
我对7!的运算,也弹出那个内存不能写的对话框呢,
发表于:2007-03-29 15:27:195楼 得分:0
for(i=1;i <41;i++)
这个已经错了。只能 <   40
for(j=1;。。。;j++)
                                    {
temp   =     data[j]*   i   +进位;
                                                      data[j]   =   temp   /10;
                                                      进位   =   temp   %   10;
                                    }
就差不多出来了。你现在代码白写太复杂了。                                    
发表于:2007-03-29 15:32:396楼 得分:0
感谢楼上
现在对话框不出来了,可29!在第一位还是有零呢?
发表于:2007-03-29 15:36:117楼 得分:0
先找个计算器看看后面的结果是否正确。如果只是多了前导0,输出的时候不打印就是了。
发表于:2007-03-29 15:41:478楼 得分:0
结果有也不对呢,难道我的算法有问题
发表于:2007-03-29 15:45:249楼 得分:0
int   fun(int   n)
{
if(n==0   ¦ ¦   n==1)
    return   1;
return   n*fun(n-1);
}
发表于:2007-03-29 15:45:5110楼 得分:0
自己想想吧。这个问题应该非常简单的,你把代码写太复杂了。
发表于:2007-03-29 15:46:4311楼 得分:0
直接用上面这个递归得了,
输入n,返回n!

发表于:2007-03-29 15:51:0412楼 得分:0
楼上没有看清楚题,是可以容纳四十   位   的


快速检索

最新资讯
热门点击