❶ c语言求1到100阶乘代码
1到100?这数够大的了...
#include<stdio.h>
void main()
{
double j=1;
for(int i=1;i<=50;i++)j*=i;
printf("1到100的阶乘是%.0f\n",j);
}
下面用函数的递归调用做:
#include<stdio.h>
double fact(int n)/*求阶乘的函数*/
{
double j;
if(n>1)j=n*fact(n-1);/*递归调用,当n>1时,一直会调用下去,只不过每次参数被减1*/
else
return 1;/*当n被减到1时,返回1,如是会被累积,当n初始为1时直接返回1*/
return j;/*j是当n>1时,最后要的结果*/
}
void main()
{
printf("1到n的阶乘是%.0f\n",fact(5));
}
❷ 求100的阶乘,用C语言中的数组怎么来求啊
//这就得用到高精了。下面是我写的,能输出1~5000也阶乘的,但不能指定某个数,如果想指定某个数的,就得改下程序。如果需要,请加我Q,646203846 #include<stdio.h> #include<stdlib.h> char str[5001][20000]; int len[5001]; void solvemul(char str[],int n,char ans[]) { int i,j,e,d,q; int p; for(j=0;j<len[n-1]+10;j++) ans[j]='0'; j=0; q=n; do { p=n%10; if(p!=0) { e=0; for(i=0;str[i]!='\0';i++) { d=ans[j+i]-'0'+(str[i]-'0')*p+e; e=d/10; ans[j+i]=d%10+'0'; } while(e) { d=ans[j+i]-'0'+e; e=d/10; ans[j+i]=ans[j+i]-'0'+d%10+'0'; i++; } } n=n/10; j++; } while(n!=0); ans[j+i-1]='\0'; len[q]=j+i-1; } int main() { int i,j; str[1][0]='1';str[1][1]='\0';len[1]=1; printf("1\n"); for(i=2;i<=5000;i++) { solvemul(str[i-1],i,str[i]); for(j=len[i]-1;j>=0;j--) printf("%c",str[i][j]);printf("\n"); } return 0; }
❸ C语言做100的阶乘
可以分段存,比如建一个数组,把结果村到数组里面。
❹ c语言程序100阶乘的值的问题
看了你问题,我感觉都不需要看你程序了,100阶乘你知道多大吗?你定义long long 都不够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();
}
❻ 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的阶乘
#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);
}
❽ 用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以内的阶乘
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 调试通过。