C 编程 从键盘输入三个数 求这三个数的阶乘和

来源:百度知道 编辑:UC知道 时间:2024/05/17 21:02:32
C 编程 从键盘输入三个数 求这三个数的阶乘和

昨天见了 一个人问这个问题 我就自己写了一个但是新手 不怎么会 结果运行不了

高手给改一下吧 我要知道为什么那么改

第一个
#include <stdio.h>
main()
{
int a,b,c,m,n,o,p,q,r;
scanf("%d%d%d",&a,&b,&c);

for(m=1,m<=a,m++)
p=p*m;
for(n=1,n<=b,n++)
q=q*n;
for(o=1,o<=c,o++)
r=r*o;
printf("%d"(p+q+r));
getch();
}

第二个

#include <stdio.h>
main()
{
int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);

for(d=1,d<a,d++)
a=a*d;
for(d=1,d<b,d++)
b=b*d;
for(d=1,d<c,d++)
c=c*d;
printf("%d"(a+b+c));
getch();
}

3Q
我照楼下的改过了 但是好像还是不行啊
第一个
#include <stdio.h>
main()
{
int a,b,c,m,n,o,p=1,q=1,r=1;
scanf("%d%d%d",&a,&b,&c);

for(m=1;m<=a;m++)

int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);
d=f(a)+f(b)+f(c);

int f(i)
{
if(i==1 || i==0)return 1;
else return i*f(i-1)
}
//我把楼上的改成递归了。但是有一个非常需要注意的地方。int的取值范围很小,所以这中递归方法能计算的数的范围很小,超过一定值得数的阶乘就超出了int的取值范围。计算结果也就不对了。要想写一个比较好的阶乘计算工具就得自己设计数据结构来存储结果了。

这个没有问题,你可以试试1 2 3
#include "stdio.h"
int f(int i)
{
if(i==1 || i==0)return 1;
else return i*f(i-1);
}
main()
{
int a,b,c,d;
scanf("%d%d%d",&a,&b,&c);
d=f(a)+f(b)+f(c);
printf("\nresult:%d\n",d);
}

for(m=1,m<=a,m++) 里的是;而不是,
就拿第一个说吧,因为第二个错得很离谱了。。。
p,q,r都要先付初值1

因为都没有给赋初值,当然要出错
第一个程序的p,q,r,先初始化=1,第二个程序的a,b,c也要初始化
printf("%d"(p+q+r)); 格式中间少了个逗号

第一个程序你修改过后的绝对是正确的,你自己好好运行下.输入1 2 3,出来的结果是9.第二个程序是错误的.逻辑就不对.负数是因为第三个循环.c=c*d;因为c=3,所以循环后c会不断扩大,数据溢出.最后出现一个负数.按照第一个程序的逻辑思路就可以了.不过要提醒你的是,介乘很大,很容易溢出,测试范围的数一般很局限的,很小,在个位数.

<