当前位置:首页 » 编程语言 » 100阶乘c语言

100阶乘c语言

发布时间: 2022-09-09 17:24:35

c语言编程求100的阶乖,末尾有多少个零

以C语言的数据类型来求100的阶乘不造成数据过大溢出是不现实的,所以不能在求得100的阶乘之后再数它末尾有多少个0,只能在累乘的过程中遇到一个0就干掉,最后数总共干掉了多少个,至于由于溢出前面丢掉了多少位的数就管不了了,代码如下:main()
{
long
a=1;
int
i,n=0;
for(i=2;i<=100;i++)
{
a*=i;
if(a>10000)a=a%10000;
/*只要末几位不变对乘法结果的末几位就没有影响,所以在此限定a不要过大*/
loop1:
if(a>10&&a%10==0){a/=10;n++;goto
loop1;}
/*为了防止十位也是0,所以返回来再判断一次*/
}
printf("%d\n",n);
}结果是24

Ⅱ 用c语言编写100!(100的阶乘)

// 注释比较多,希望你不要感到厌烦,呵呵。
// 还记得10进制的乘法么?
// 567
// * 5
// -------
// 2835
// 用编程语言表示出来就是
// 当前的int a[4] ={0, 5, 6, 7}
// 然后从最低位开始用5去乘以每一位,少于10的部分就是这
// 个位新的值超过10的部分就是进位,加入他的前一位的结果
// 那么从最低位开始a[0]*5=35,由于没有进位所以a[0]=5, carry
// =3,a[1]*5=30,加上进位3=33,所以a[1] =3, carry=3,以此类推最
// 高位就是a[3] =2;所以我们的到的数组就是a[4] ={2,8,3,5},结果
// 当然就是2835拉。
// 下面我们只是用更大的进制模仿这个过程,XD
#include <stdio.h>
#define SIZE 500 // SIZE 500就可以表示结果在500*6=3000位以内的大整数
#define BASE 1000000 // 目前使用进制的基数,6位的底数可以处理1000以内的阶乘
// 超过1000的话会溢出,因为最大的六位数
//乘以4位数可能超过32位整数的范围
// 当处理大一点的阶乘的话就要相应减小这个值
// 所以当你求1千万的阶乘的时候记得base是10,呵呵。
unsigned int a[SIZE];

void jiechen(int n)
{
int i, j;
int carry; //进位
int max =0; //最高位,当前数即表示占了数组的max+1项
a[0] = 1; //最低位初始化成1

for(i=1; i<=n; i++) {
carry =0; //每让这个超大的数乘一个新的数字时,进位初始化成0
for(j=0; j<=max; j++) { // 处理每一位
a[j] = a[j]*i +carry;
carry = a[j] / BASE; //超出10000000作为高位的进位 a[j] = a[j] % BASE; //当前位是当前位乘以*i+低位的进位
}
if(carry != 0) //最高位有进位就调整当前最高位
a[++max] = carry;
}
printf("%d!=", n); //以下是打印过程
printf("%d", a[max]); //最高位我们不打印前面的0,不然看起来不爽XD
for(i=max-1; i>=0; i--) //注意:是从高位开始打印的
printf("%06d", a[i]); //打印6位,注意要包括前面的0,还有修改了BASE的话记得改这里!
printf("\n");
}

int main()
{
for(int i=1; i<100; i++) //打印100以内的阶乘来验证我们的成果
jiechen(i);
return 0;
}

Ⅲ 用C语言编写一个程序实现100的阶乘(要求采用函数调用方式实现)

long int nx_1(unsigned int x)
{
auto int i;
auto long int temp;
temp = 1;
for(i=1;i<=x;i++)
temp *= i;
return temp;
}

例如 a=nx_1(100);那么a 就是100阶乘值

Ⅳ 用C语言求100的阶乘

voidmain()
{
longi,j,x,num=0;
for(i=1;i<=100;i++)
{
x=1;
for(j=1;j<=i;j++)
x*=j;
num+=x;
}
printf("%ld",num);
getch();
}

Ⅳ 100的阶乘用c语言怎样表示

定义为long double仍然会溢出,因为在32位系统下long double仍然只有32位,下面即可:

#include <stdio.h>
int n;
int r[600]={0};
int count(n)
{
int i;
for(i=0;i<600;i++)
r[i]*=n;
for(i=599;i>0;i--)
{
r[i-1]=r[i-1]+r[i]/10;
r[i]=r[i]%10;
}
}

int main()
{
int i;
int reach=0;
r[599]=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
count(i);
for(i=0;i<600;i++)
{if(r[i]) reach=1;
if(r[i]||reach) printf("%d",r[i]);
}
getchar();
getchar();
}

Ⅵ 用C语言编100以内的阶乘

int n;
int r[600]={0};
int count(n)
{
int i;
for(i=0;i<600;i++)
r[i]*=n;
for(i=599;i>0;i--)
{
r[i-1]=r[i-1]+r[i]/10;
r[i]=r[i]%10;
}
}

int main()
{
int i;
int reach=0;
r[599]=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
count(i);
for(i=0;i<600;i++)
{if(r[i]) reach=1;
if(r[i]||reach) printf("%d",r[i]);
}
getchar();
getchar();
}

这个程序输入数,可以计算出它的阶乘。TURBO C 调试通过。

Ⅶ C语言做100的阶乘

可以分段存,比如建一个数组,把结果村到数组里面。

Ⅷ 100的阶乘在C语言中怎么编程(要求用while和for两种方法)

#include<stdio.h>
intmain()
{
inta=100;
doublenum=1.0;
//while循环相乘实现阶乘
while(a>0)
{num*=a;
a--;
}
printf("100!的结果:%le ",num);
//for循环相乘实现阶乘
num=1;
for(a=1;a<=100;a++)
{num*=a;}
printf("100!的结果:%le ",num);
return0;
}

Ⅸ c语言编程:100的阶乘有多少个零

double
类型不能用
%
运算符,只有
char
,short,int,long
类型能用
%
类型的运算符!!!
因此:
f(a%10==0)
是错的,编译通不过。
另外,这道题目根本不是这么算的!你算法就有问题。100
的阶乘是很大的数,double
类型即使能保存的下,
也会有挺大的误差了。
题的算法是:统计数字
1
~
100
中间,因子2

因子
5
出现的次数。哪个出现的次数少,设少的出现
n
次,那么最终结果就是
n

10。
比如,先简单点的,统计
10
的阶乘,计算结果有多少个
10。
设因子
2
出现次数为
x,因子
5
出现次数为
y。开始
x=y=0。
1
~
10
中:
1,1
即不能被
2
整除(没有因子2),也不能被
5
整除(没有因子5);x=y=0。
2,1
能被
2
整除(有因子2),但是不能被
5
整除(没有因子5);x=x+1
=
1,
y=0。
3,3
即不能被
2
整除(没有因子2),也不能被
5
整除(没有因子5);x=1,y=0。
4,4
能被
2
整除(有两个因子2),但是不能被
5
整除(没有因子5);x=x+2=3,
y=0。
5,x=3,y=y+1
=
1
6,x=x+1=4,y=1
7,x=4,y=1
8,x=x+3=7,y=1
9,x=7,y=1
10,x=x+1=8,y=y+1=2
最终
x=8,y=2,他们中较小的是
2,因此最终的结果中有
2
个零。
实际上
10!
=
3628800,结果确实是有
2
个零。
下面是程序:
#include
int
main(int
argc,
char
*argv[])
{
//
计算
n
的阶乘
int
n=100;
//
x
统计因子
2
出现的次数,y
统计因子
5
出现的次数
int
x=0,y=0;
int
i,t;
for(i=1;
i<=n;
i++)
{
t
=
i;
while(t%2
==
0)
{
x++;
t/=2;
}
while(t%5
==
0)
{
y++;
t/=5;
}
}
printf("%d!
has
%d
zeros
at
end!\n",
n,
(x<=y
?
x
:
y));
return
0;
}

Ⅹ 用C语言程序求100的阶乘

#include <stdio.h>
main()
{
int i,j,sum=1;
int count=0;
for(i=1;i<=100; i++)
{ sum=1;
for(j=1;j<=i;++j)
{ sum*=j;}
count+=sum;
}

printf("%d",count);

}

热点内容
脚本四要素 发布:2025-01-13 02:40:18 浏览:929
编译过程序后无法运行 发布:2025-01-13 02:40:16 浏览:306
c语言8字节 发布:2025-01-13 02:38:51 浏览:707
ps3iso文件夹 发布:2025-01-13 02:10:09 浏览:290
从qq里如何看到自己的登录密码 发布:2025-01-13 02:10:01 浏览:432
文明重启为什么会有服务器维护 发布:2025-01-13 02:00:14 浏览:353
净值人群怎么配置资产 发布:2025-01-13 01:42:07 浏览:462
android显示时间 发布:2025-01-13 01:42:06 浏览:4
php微信公众号开发教程 发布:2025-01-13 01:39:28 浏览:191
传奇攻倍脚本 发布:2025-01-13 01:28:58 浏览:511