| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1124 人关注过本帖
标题:阶乘问题
只看楼主 加入收藏
fcyvhk
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-7-14
结帖率:100%
收藏
 问题点数:0 回复次数:6 
阶乘问题
#include "stdio.h"
#include "iostream.h"

int main(int argc, char* argv[])
{
    int carry,n,j;
    int a[2000];
    int digit=1;
    int temp,i;
    cout<<"please enter n:"<<endl;
    cin>>n;
    a[0]=1;
    for(i=2; i<=n; i++)
    {
        for(carry=0,j=1; j<=digit; ++j)
        {
            temp=a[j-1]*i+carry;
            a[j-1]=temp%10;
            carry=temp/10;
        }
        while(carry)
        {
            //digit++;
            a[++digit-1]=carry%10;  
            carry/=10;
        }
    }
    cout<<"the result is:"<<endl;
    for(int k=digit; k>=1; --k)
        cout<<a[k-1];
    cout<<endl;
    return 0;
}

    这代码求的是大数的阶乘,就是LONG DOUBLE 都放不下的那种。 但我始终没有看明白,想请大家告诉一下思路是怎么样的。 谢谢
 PS: 红色的地方我有疑问  ++ 在减1 不等于白加吗  可为什么出来的答案却不一样了?

[[it] 本帖最后由 fcyvhk 于 2008-9-9 16:16 编辑 [/it]]
搜索更多相关主题的帖子: 阶乘 
2008-09-08 03:06
caicaiha112
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-3-3
收藏
得分:0 
这是求大数的阶乘!
首先,你把语法正确:
#include <iostream>
using namespace std;
其次,具体过程这样理解:
a[]数组就是按位存放阶乘结果的
下标高的存放高位
carry是每位相乘的进位
可以举个例:6!
最后一步是120*6
a[0]=0 a[1]=2 a[2]=1
就是小学的乘法过程,自己理解吧!
2008-09-08 10:23
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
[bo][un]caicaiha112[/un] 在 2008-9-8 10:23 的发言:[/bo]

这是求大数的阶乘!
首先,你把语法正确:
#include <iostream>
using namespace std;


没必要非得这样写吧...

2008-09-08 12:31
caicaiha112
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-3-3
收藏
得分:0 
那你直接用std::cout也没人拦你啊
2008-09-08 14:10
xmnathan
Rank: 2
等 级:论坛游民
威 望:1
帖 子:73
专家分:10
注 册:2008-8-30
收藏
得分:0 
long long好像只够存到25的阶乘~然后爆了 嘿
2008-09-08 16:43
xiaoshengaimm
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-9-8
收藏
得分:0 
好像不行,有数组越界的嫌疑,请先试一试再聊
2008-09-08 16:44
fcyvhk
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-7-14
收藏
得分:0 
[bo][un]caicaiha112[/un] 在 2008-9-8 10:23 的发言:[/bo]

这是求大数的阶乘!
首先,你把语法正确:
#include
using namespace std;
其次,具体过程这样理解:
a[]数组就是按位存放阶乘结果的
下标高的存放高位
carry是每位相乘的进位
可以举个例:6!
最后一步是 ...

我稍微理解了一点你的思路,但笔算还是算不出来,就算是依次放入数组 那么下一次运算总需要上一次计算的值   可我找不出这个保存上一次阶乘值的变量,还有就是红色部分请教下`
2008-09-09 16:18
快速回复:阶乘问题
数据加载中...
 
   



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

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