计算1到20的阶乘

lipeng13193687860 2016-11-03 05:40:54
#include<stdio.h> int main() { int i,j,k=1; for(i=1;i<=20;i++) { k*=i; printf("%d!+",i); } printf("=%d",k); return 0; }
...全文
1531 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leq321 2016-11-25
  • 打赏
  • 举报
回复
引用 3 楼 qq423399099 的回复:
考虑用数组存结果

#include <stdio.h>
#define N 10000
int main()
{
	static long int r[N] = { 1 }; /*用long int 是为了保证16位编译器也正常*/
	int i, j;
	int k = 0, l = 0;
	for (i = 1; i <= 40; i++)
	{
		for (j = 0; j <= l; j++)
		{
			r[j] = r[j] * i + k;
			k = r[j] / 10000;
			r[j] = r[j] % 10000;
		}
		if (k)
		{
			l++;
			r[j] = k;
			k = 0;
		}
		j = l;
		printf("%d!=%d", i, r[j--]);
		for (; j >= 0; j--)
		{
			printf("%04d", r[j]);
		}
		printf("\n");
	}
	return 0;
}
老师你这个有点难理解,新手看不懂...
赵4老师 2016-11-25
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
lipeng13193687860 2016-11-23
  • 打赏
  • 举报
回复
引用 5 楼 qq_36532097的回复:
是不是有点问题啊,,结果不对,。算成20的阶乘了
确实。还需要一个sum 欢迎指正
ck2333 2016-11-22
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

double fun(int n)
{
    long double f;
    if(n==0)
        f=1;
    else
        f=n*fun(n-1);
    return f;
};

int main()
{
    int n;
    cout<<"请输入求阶乘的数n:"<<endl;
    cin>>n;
    cout<<"n!="<<fun(n)<<endl;
    return 0;
} 
numengyuan 2016-11-22
  • 打赏
  • 举报
回复
#include <iostream>

long clc(int n){
    if(n==1) return 1;
    return n*clc(n-1);
}

int main()
{
    long sum;
    for(int i = 1; i <= 20; i++)
        sum += clc(i);
	std::cout << sum << std::endl;

	return 0;
}
numengyuan 2016-11-22
  • 打赏
  • 举报
回复
#include <iostream> long clc(int n){ if(n==1) return 1; return n*clc(n-1); } int main() { long sum; for(int i = 1; i <= 20; i++) sum += clc(i); std::cout << sum << std::endl; return 0; }
qq_36638954 2016-11-22
  • 打赏
  • 举报
回复
你这个是在计算20的阶乘,不是1-20阶乘的和
斗鹰 2016-11-04
  • 打赏
  • 举报
回复
是不是有点问题啊,,结果不对,。算成20的阶乘了
赵4老师 2016-11-04
  • 打赏
  • 举报
回复
仅供参考:
#include<stdio.h>
#define N 1000    //要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0;
int main()//雨中飞燕之作
{
    for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
        s[a]=(b+=s[a]*t)%10000,b/=10000;
    for(printf("%d",s[*s]);--*s>0;) printf("%04d",s[*s]);
    return 0;
}
小灸舞 2016-11-04
  • 打赏
  • 举报
回复
考虑用数组存结果

#include <stdio.h>
#define N 10000
int main()
{
	static long int r[N] = { 1 }; /*用long int 是为了保证16位编译器也正常*/
	int i, j;
	int k = 0, l = 0;
	for (i = 1; i <= 40; i++)
	{
		for (j = 0; j <= l; j++)
		{
			r[j] = r[j] * i + k;
			k = r[j] / 10000;
			r[j] = r[j] % 10000;
		}
		if (k)
		{
			l++;
			r[j] = k;
			k = 0;
		}
		j = l;
		printf("%d!=%d", i, r[j--]);
		for (; j >= 0; j--)
		{
			printf("%04d", r[j]);
		}
		printf("\n");
	}
	return 0;
}
paschen 2016-11-03
  • 打赏
  • 举报
回复
20的阶乘用int不够表示,换成long long 吧
maoxuechun 2016-11-03
  • 打赏
  • 举报
回复
#include<stdio.h> int main() { int i,j; double k=1; for(i=1;i<=20;i++) { k*=i; printf("%d!+",i); } printf("\b=%.f\n",k); return 0; } 你的结果超出int的取值范围了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧