| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2241 人关注过本帖, 1 人收藏
标题:大整数N的阶乘求解!为什么结果又错误
只看楼主 加入收藏
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
结帖率:100%
收藏(1)
已结贴  问题点数:30 回复次数:11 
大整数N的阶乘求解!为什么结果又错误
程序代码:
/* 大整数的阶乘计算 */
#include "stdio.h"
void caculate(int n);
int num[2000]={0};            //计算结果不超过5000位,用数组存储每一位数字
void main()
{
    int n;
    printf("Please input n:\n");
    scanf("%d",&n);
    caculate(n);      
}
void caculate(int n)
{
    int total=0,remainder=0,i,j,flag;
    j=n-1;                      //从数组最后一位开始存储
    num[j]=1;
    for(i=2;i<=n;i++)
    {
        while(j>0)
        {
            total=i*num[j]+remainder;
            remainder=0;
            if(total>=10)
            {
                num[j]=total%10;
                remainder=total/10;
            }
            else
                num[j]=total;
            j--;
        }
        j=n-1;
        remainder=0;
        total=0;
    }
    for(i=0;i<n;i++)
    {
        if(num[i]!=0||flag==1)
        {
            printf("%d",num[i]);
            flag=1;
        }

    }    
    printf("\n");
}

后来发现我的程序有问题,计算25以后阶乘都有错误,不知道为何?而且错误都是漏掉了正确输出结果开头的一些数字,请大家指导!
搜索更多相关主题的帖子: color 
2013-04-26 21:27
yctchxf
Rank: 6Rank: 6
来 自:盐城
等 级:侠之大者
威 望:2
帖 子:176
专家分:454
注 册:2012-4-10
收藏
得分:15 
#include <stdio.h>
#include <string.h>
#define max 3000
int f[max];
int main()
{   
    int i, j, n, c, s;   
    scanf("%d", &n);   
    f[0] = 1;   
    for(i = 2; i <= n; i++)
    {        
        c = 0;        
        for(j = 0; j < max; j++)
        {            
            s = f[j] * i + c;            
            f[j] = s % 10;           
            c = s / 10;        
        }   
    }   
    for(j = max - 1; j >= 0; j--)
        if(f[j]) break;   
    for(i = j; i >= 0; i--)
        printf("%d", f[i]);   
    printf("\n");   
 return 0;
}
2013-04-26 22:03
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 2楼 yctchxf
谢谢,你的程序是正确的,你能够告诉我我的程序哪里有问题吗,我的思想和你是类似的,可是不知道错误原因,求指教
2013-04-26 22:17
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
N! 一定不超过 N位么?


[fly]存在即是合理[/fly]
2013-04-26 23:36
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
问题已找到,贴出正确代码,原来考虑有两点小错误,终于发现了,哎。。。1.首先2000位对于1000!精度不够,1000!有2568位。然后,我原来代码里最后一个循环i<n不对.。
程序代码:
/* 大整数的阶乘计算 */
#include "stdio.h"
void caculate(int n);
int num[5000]={0};            //计算结果不超过5000位,用数组存储每一位数字
void main()
{
    int n;
    printf("Please input n:\n");
    scanf("%d",&n);
    caculate(n);      
}
void caculate(int n)
{
    int total=0,remainder=0,i,j,flag;
    j=4999;                      //从数组最后一位开始存储
    num[4999]=1;
    for(i=2;i<=n;i++)
    {
        while(j>0)
        {
            total=i*num[j]+remainder;
            remainder=0;
            if(total>=10)
            {
                num[j]=total%10;
                remainder=total/10;
            }
            else
                num[j]=total;
            j--;
        }
        j=n-1;
        remainder=0;
        total=0;
    }
    for(i=0;i<5000;i++)
    {
        if(num[i]!=0||flag==1)
        {
            printf("%d",num[i]);
            flag=1;
        }

    }    
    printf("\n");
}
2013-04-26 23:49
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 4楼 azzbcc
恩,我发现了,谢谢,还想请问一个问题,怎么计算程序的运行时间,比如说对于我这个程序,n越大,我想看看它运行时间是多少,这该怎么做?谢谢
2013-04-26 23:51
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:15 
程序代码:
#include <time.h>
#include <stdio.h>

int main()
{
    int i;
    clock_t beg, end;
    beg = clock();

    for (i = 0;i < 10000000;++i);

    end = clock();
    printf("%.2f ms\n", (end - beg) / 1000.0);
    return 0;
}


[fly]存在即是合理[/fly]
2013-04-27 18:37
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 7楼 azzbcc
非常感谢
2013-04-27 19:29
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 7楼 azzbcc
但是我怎么感觉实际输出的时间比等待的时间小很多??单位是ms吗
2013-04-27 19:50
wang155423
Rank: 6Rank: 6
等 级:侠之大者
帖 子:216
专家分:408
注 册:2011-9-4
收藏
得分:0 
回复 7楼 azzbcc
还有为什么要除以1000啊
2013-04-27 20:33
快速回复:大整数N的阶乘求解!为什么结果又错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014216 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved