标题:编程计算一个大数(如40)的阶乘,将结果保存在一个大小为50的整数数组中, ...
只看楼主
Buddhawly
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-10-15
结帖率:100%
已结贴  问题点数:20 回复次数:6 
编程计算一个大数(如40)的阶乘,将结果保存在一个大小为50的整数数组中,每一个数组元素存储大数中的一个数字。
/*    c6-17.c    */
#include<stdio.h>
int main()
{
    int i, j = 1, k=1,t;
    int len = 0;
    int a[50];
    for (i = 2;i <= 10;i++)
        j = j * i;
    for (i = 0;k == 0;i++)
    {
        t = j % 10;
        a[i] = t;
        k = j / 10;
        t = k;
        len = len + 1;
    }
    for(i=len;i>=1;i--)
    printf("%d", a[i]);
    return 0;
}
因为还没有学字符串相关的函数,所以不让用,觉得用字符数组会方便点,但是没搞懂怎么把数字储存到字符数组里。
这是我自己写的代码,运行什么都没有输出,我的想法是把每个数字先倒序输出然后储存位数,最后再从最后以为开始输出这样就能正序输出最终结果。
求大神指点,不用我的这个逻辑也可以,感谢!!!
搜索更多相关主题的帖子: 数组 int 大数 一个数 输出 
2019-11-14 21:44
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:15 
程序代码:
#include <stdio.h>

int main()
{
    int i, j = 1;
    int len = 0;
    int a[50];
    for (i = 2;i <= 10;i++)
        j = j * i;

    for (i = 0;j != 0;i++)
    {
        a[i] = j % 10;
        j = j / 10;
        len = len + 1;
        //printf("i=%d,a[i]=%d,j=%d,len=%d\n",i,a[i],j,len);
    }

    printf("j=");
    for(i=len-1;i>=0;i--)
        printf("%d", a[i]);
    return 0;
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-14 22:03
Buddhawly
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-10-15
得分:0 
回复 2楼 纯蓝之刃
谢谢大佬!可是如果是40的阶乘的话就什么都输出不了,是不是太大的必须要用字符串啊?
2019-11-14 22:17
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
这是我自己写的代码,运行什么都没有输出

觉得用字符数组会方便点,但是没搞懂怎么把数字储存到字符数组里。

那现在,你是要解决你代码的问题,还是要将你的代码改为用char[]?不要将两个无关的问题糅合在一起问。
2019-11-15 09:46
Buddhawly
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-10-15
得分:0 
回复 3楼 Buddhawly
两种都可以。
2019-11-15 15:13
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <stdio.h>
#include <stdbool.h>

bool factorial( unsigned n, char out[], size_t out_size )
{
    if( out_size < 2 )
        return false;
    out[out_size-2] = 1;
    char* pbeg = out+out_size-2;

    for( unsigned i=1; i<=n; ++i )
    {
        unsigned carry = 0;
        for( char* p=out+out_size-2; p>=pbeg; --p )
        {
            carry = carry + (*p * i);
            *p = carry%10;
            carry /= 10;
        }
        for( ; carry!=0; carry/=10 )
        {
            if( pbeg == out )
                return false;
            *--pbeg = carry%10;
        }
    }

    for( char* p=pbeg; p!=out+out_size-1; ++p )
        out[p-pbeg] = *p + '0';
    out[out+out_size-1-pbeg] = '\0';
    return true;
}

int main( void )
{
    char buf[50];

    if( factorial(0,buf,sizeof buf) )
        printf( "0! = %s\n", buf );

    if( factorial(1,buf,sizeof buf) )
        printf( "1! = %s\n", buf );

    if( factorial(10,buf,sizeof buf) )
        printf( "10! = %s\n", buf );

    if( factorial(40,buf,sizeof buf) )
        printf( "40! = %s\n", buf );

    if( factorial(41,buf,sizeof buf) )
        printf( "41! = %s\n", buf );
}
2019-11-15 16:28
Buddhawly
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2019-10-15
得分:0 
回复 6楼 rjsp
谢谢大佬,大佬nb
2019-11-16 23:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497819-1-1.html




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

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