| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1863 人关注过本帖
标题:用数组怎样对付阶乘问题
只看楼主 加入收藏
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
以下程序用来求一个数的阶乘,结果存放在一个int型、大小为100的一维数组里
程序我已经运行过了,没有问题
#include <iostream>
using namespace std;
const int size = 100;  //数组大小
int J[size];  //用它存放阶乘的结果,每个数组元素存放一个十进制数

void jiecheng(const int number)
{
    /////////1 对J[]初始化////////
    for(int i = 0; i < size; i++)
    {
        J[i] = 0;
    }
    J[size - 1] = 1;    
    if(number == 0)
    {
        J[size - 1] = 0;
        return;
    }
    ////////1/////////


    int jinwei = 0;
    for(i = 2; i <= number; i++)
    {
        int position = size - 1;
        /////////2///////
        int flag = 1;
        for(int j = 0; j < size; j++)
        {
            if(flag)
            {
                J[position] *= i;
            }
            flag = 1;
            if(J[position] >= 10)
            {
                jinwei = J[position] / 10;
                J[position] %= 10;
                J[position - 1] *= i;
                J[position - 1] += jinwei;
                flag = 0;
            }
            position--;
        }
        ////////2////////

    }
}

int main()
{
    jiecheng(8);
    for(int i = 0; i < size; i++)
    {
        cout << i << " : " << J[i] << endl;
    }
    return 0;
}

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-22 19:09
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
不好意思,我用的是C++

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-22 19:11
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
下面是我写的改进了下进位部分:
// 1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <iostream>
using namespace std;
const int size = 100;  //数组大小
int J[size];  //用它存放阶乘的结果,每个数组元素存放一个十进制数

void jiecheng(const int number)
{
    /////////1 对J[]初始化////////
    for(int i = 0; i < size; i++)
    {
        J[i] = 0;
    }
    J[size - 1] = 1;   
    if(number == 0)
    {
        J[size - 1] = 0;
        return;
    }   

    for( int i= 2; i <= number; i++)
    {
        int position = size - 1;
        int carry = 0;//存放进位
        
        for(int position = size-1;position >=0; position--)
        {
            J[position]*=i;
            J[position]+=carry;
            if(J[position]>=10){carry=J[position]/10;J[position]%=10;}
            else carry=0;      
        }      

    }
}

int main()
{
    jiecheng(8);
    for(int i = 0; i < size; i++)
    {
        cout << i << " : " << J[i] << endl;
    }
    return 0;
}
2008-11-23 01:23
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
我的是根据crazycoder的代码改进的,我本来是不会写的,在这感谢LS
2008-11-23 01:24
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
感谢alweeq86的改进,很不错。但还有2个小错误,我把它改过来了
#include <iostream>
#include <string>
#include <iostream>
using namespace std;
const int size = 100;  //数组大小
int J[size];  //用它存放阶乘的结果,每个数组元素存放一个十进制数

void jiecheng(const int number)
{
    /////////1 对J[]初始化////////
    for(int i = 0; i < size; i++)
    {
        J[i] = 0;
    }
    J[size - 1] = 1;   
    if(number == 0)
    {
        J[size - 1] = 0;
        return;
    }   

    for(i= 2; i <= number; i++)   //这里。。改了一下//
    {
        int position = size - 1;
        int carry = 0;//存放进位
        
        for(;position >=0; position--)  //还有这里。。改了一下//
        {
            J[position]*=i;
            J[position]+=carry;
            if(J[position]>=10){carry=J[position]/10;J[position]%=10;}
            else carry=0;      
        }      

    }
}

int main()
{
    jiecheng(25);
    for(int i = 0; i < size; i++)
    {
        cout << i << " : " << J[i] << endl;
    }
    return 0;
}

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-23 08:39
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
for(i= 2; i <= number; i++)   //这里。。改了一下//
????
你这么写编译不会出错??i未定义
2008-11-23 10:27
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
i是在上一个for循环里定义的,我发的程序一般都是编译运行通过了的。

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-23 11:04
pengzhuo
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2008-10-9
收藏
得分:0 
# include "stdio.h"
void main()
{
long sum=0;
int i;
for(i=1;i<=25;i++)
{
   i*=i;
  sum+=i;
}
}
2008-11-23 13:20
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
回复 第27楼 crazycoder 的帖子
我用VSTO编译就出错!
2008-11-24 10:09
快速回复:用数组怎样对付阶乘问题
数据加载中...
 
   



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

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