Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150728
  • 博文数量: 48
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-18 14:46
个人简介

多多学习,多多交流

文章分类
文章存档

2016年(1)

2015年(23)

2014年(24)

我的朋友

分类: C/C++

2014-05-16 18:09:58

    打算做一点算法专题训练,先从大数处理开始,HDOJ 1042的求N!,N的范围为0到10000,源代码如下:
    #include
#include

#define MAX_NUM 50000

int main(int argc,char *argv[])
{
    int i,j,N,cnt = 1,plus_one_flag,num;
    char temp[MAX_NUM];

    while(scanf("%d",&N) != EOF && N >= 0 && N <= 10000)
    {
        memset(temp,'0',sizeof(temp));      //memset(temp,0,sizeof(temp));
        temp[MAX_NUM - 1] = '1';
        cnt = 1;

        for(i = 2;i <= N;i++)
        {
            plus_one_flag = 0;

            for(j = 1;j <= cnt;j++)
            {
                num = i * (temp[MAX_NUM - j] - '0') + plus_one_flag;
                 
                if(num / 10 >= 1)
                {
                     plus_one_flag =  num / 10;
                     temp[MAX_NUM - j] = num % 10 + '0';
                     if(j == cnt)
                     {
                        ++cnt;
                     }
                }
                else
                {
                     temp[MAX_NUM - j] = num + '0';
                     plus_one_flag = 0;
                }
            }
        }

        for(i = MAX_NUM - cnt;i < MAX_NUM;i++)
        {
            printf("%c",temp[i]);
        }
        printf("\n");
    }

    return 0;
}


阅读(677) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~