| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2690 人关注过本帖
标题:简单的阶乘为什么不出结果 新手
只看楼主 加入收藏
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:569
专家分:3707
注 册:2019-7-29
收藏
得分:0 
用字符串实现的大数阶乘,未优化,仅供参考
程序代码:
#include<stdio.h>

#define max_len 1024

int intpow(int n, int m)
{
    int i,sum = 1;
    for(i = 0; i< m; i++)
    {
        sum = sum * n;
    }
    return sum;
}

int main()
{
    char str[max_len],str_temp[max_len],str_copy[max_len];//str:阶乘值,str_copy:保存上次乘后的值,str_temp:临时变量
    int i,j,val,n,len,len_temp,len_copy,carry,index;   //carry:进位.index:指数
    printf("输入一个整数:");
    scanf("%d",&n);

    memset(str,0,sizeof(str));
    memset(str_temp,0,sizeof(str_temp));
    str[0]=1;
    len=1;

    for(i=1;i<=n;i++)
    {
        index=0;
        len_copy = len;
        memcpy(str_copy,str,max_len);
        memset(str,0,sizeof(str));
        len = 0;
        while(i/intpow(10,index)>0)
        {
            memset(str_temp,0,sizeof(str_temp));
            memcpy(str_temp+index,str_copy,len_copy);
            len_temp=len_copy+index;
            val=i/intpow(10,index)%10;
            carry=0;
            for(j=0;j<len_temp;j++)
            {
                str_temp[j]=str_temp[j]*val+carry;
                carry=str_temp[j]/10;
                str_temp[j]=str_temp[j]%10;
            }
            if(carry>0)
            {
               str_temp[len_temp]=carry;
               len_temp+=1;
            }

            for(j=0,carry=0;j<len_temp;j++)
            {
                str[j]=str_temp[j]+str[j]+carry;
                carry=str[j]/10;
                str[j]=str[j]%10;
            }
            if(carry>0)
            {
               str[len_temp]=carry;
               len=len_temp+1;
            }
            else
            {
                len=len_temp;
            }
            index++;
        }
    }

    printf("value=");
    for(j=len-1;j>=0;j--)
    {
        printf("%d",str[j]);
    }
    printf("\n");

    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2022-09-07 09:16
仙风道孤
Rank: 1
等 级:新手上路
威 望:1
帖 子:3
专家分:5
注 册:2022-9-7
收藏
得分:0 
回复 楼主 JJGA
#include<stdio.h>
int main()
{
    int i, n;
    int a = 1;
    printf("输入一个整数:");
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        a = a * i;
    }
    printf("%d\n", a);
    return 0;
}
2022-09-07 22:06
快速回复:简单的阶乘为什么不出结果 新手
数据加载中...
 
   



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

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