注册 登录
编程论坛 C语言论坛

编程计算一个大数(如40)的阶乘,将结果保存在一个大小为50的整数数组中,每一个数组元素存储大数中的一个数字。

Buddhawly 发布于 2019-11-14 21:44, 4058 次点击
/*    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;
}
因为还没有学字符串相关的函数,所以不让用,觉得用字符数组会方便点,但是没搞懂怎么把数字储存到字符数组里。
这是我自己写的代码,运行什么都没有输出,我的想法是把每个数字先倒序输出然后储存位数,最后再从最后以为开始输出这样就能正序输出最终结果。
求大神指点,不用我的这个逻辑也可以,感谢!!!
6 回复
#2
纯蓝之刃2019-11-14 22:03
程序代码:
#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;
}
#3
Buddhawly2019-11-14 22:17
回复 2楼 纯蓝之刃
谢谢大佬!可是如果是40的阶乘的话就什么都输出不了,是不是太大的必须要用字符串啊?
#4
rjsp2019-11-15 09:46
这是我自己写的代码,运行什么都没有输出

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

那现在,你是要解决你代码的问题,还是要将你的代码改为用char[]?不要将两个无关的问题糅合在一起问。
#5
Buddhawly2019-11-15 15:13
回复 3楼 Buddhawly
两种都可以。
#6
rjsp2019-11-15 16:28
程序代码:
#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 );
}
#7
Buddhawly2019-11-16 23:07
回复 6楼 rjsp
谢谢大佬,大佬nb
1