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

简单的阶乘为什么不出结果 新手

JJGA 发布于 2021-07-22 17:20, 3033 次点击
#include<stdio.h>
int main()
{
    int i,n;
    int a=1;
    printf("输入一个整数:");
    scanf("%d\n",&n);
    for(i=1;i<=n;i++)
    {
        a=a*i;
    }
    printf("%d\n",a);
    return 0;
}
11 回复
#2
八画小子2021-07-22 19:43
不出结果是什么意思?
#3
JJGA2021-07-22 20:10
回复 2楼 八画小子
就比如我输入5再回车就没有东西了 没有运算一样不知道是输入出错还是哪里问题
#4
JJGA2021-07-22 20:12
回复 楼主 JJGA
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-7-22 20:14编辑过]

#5
rjsp2021-07-22 23:11
回复 3楼 JJGA
因为根据格式你还没输完

将 scanf("%d\n",&n);
改为 scanf("%d",&n);
试试
#6
王牌疯姐姐2021-07-27 20:30
把输入格式里的换行去掉就可以了
#7
mochu2021-07-30 10:46
#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;
}
#8
ws55ai662021-08-01 21:44
#include <stdio.h>
int main()
{
    int i, n, a = 1;
    printf ("请输入一个整数: ");
    scanf ("%d", &n);
    for (i = 1; i <= n; i++ )
    a = a * i;
    printf("a = %d\n",a);
    return 0;
}
#9
JJGA2022-09-03 21:03
回复 5楼 rjsp
谢谢 毕业也要好好学习!
#10
不会游泳的虾2022-09-05 08:28
用整形数据,只能算到 12!,后面的就超出整形范围了,数据溢出就出错了。
#11
纯蓝之刃2022-09-07 09:16
用字符串实现的大数阶乘,未优化,仅供参考
程序代码:
#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;
}
#12
仙风道孤2022-09-07 22:06
回复 楼主 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;
}
1