c语言100阶乘
❶ c语言做100的阶乘
#define MAXLEN 300/*假设做的是300的阶乘,自己可修改*/
#define MAXSUM 300/*用来存放阶乘结果的数组最大长度*/
#include <stdio.h>
#include <math.h>
main()
{
int i,j,k,n,sum,s;
int a[MAXSUM];
for(i=0;i<MAXSUM;i++)
{
a[i]=0;
}//数组赋初值
a[0]=1;
for(i=1;i<=MAXLEN;i++)
{
for(j=MAXSUM-1;j>=0;j--)
{
if(a[j]!=0)
{
n=j+1;
break;
}
}//确定阶乘结果保存到数组中,存到数组的第几个元素
for(k=0;k<n;k++)
{
a[k]=a[k]*i;
}//对存入数组中的数进行乘法运算
for(k=0;k<n;k++)
{
sum=a[k];
if(sum/100>0)
{
a[k]=sum%100;
a[k+1]=a[k+1]+sum/100;
}
}//乘法完成后进行进位
}
for(s=n;s>=0;s--)
{
if(a[s]>=10)
printf("%d",a[s]);
else printf("0%d",a[s]);
}//打印完成的阶乘结果(由于03在数组中只显示3故进行相关操作补足
printf("\n");
}
测试通过 ,够详细了吧
❷ c语言求1到100阶乘和代码
举例说明算法:
1!+2!+3!+……+n!
=1+2*(1+3*(1+4*(1+5(1+.(1+(n-1)*(1+n)).))))
不过当n=100貌似会溢出.因此要实现一个大数乘法的函数。
#include
void
main()
{
long
sum;
int
n=100;
sum=n;
while(n!=1)
{
sum+=1;
sum*=n-1;//使用大数乘法函数替代这里的处理
n--;
}
printf("%d\n",sum);
}
❸ 一个c语言程序要求输出100的阶乘的值
100的阶乘太大了,一个int放不下。把s改成double的吧
❹ c语言:1到100的阶乘之和,100用N输入
#include <stdio.h>
#include <stdlib.h>
#define MAX 200
int f[MAX]={0},sum[MAX]={0};//大整数,每个int存一个十进制数字,从低位到高位
void main(void)
{
int i,j,n;
f[0]=1;
printf("Input N: ");
scanf("%d",&n);//输入N
for(j=1;j<=n;j++)
{
//calc factorial,每位乘j
for(i=0;i<200;i++)
f[i]*=j;
//进位
for(i=0;i<199;i++)
{
f[i+1]+=f[i]/10;
f[i]%=10;
}
//add to sum
for(i=0;i<200;i++)
sum[i]+=f[i];
//sum进位
for(i=0;i<199;i++)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
}
//从最高位开始输出
//先找到最高位
printf("\n\nThe result is:\n");
i=199;
while(sum[i]==0)
i--;
while(i>=0)
printf("%d",sum[i--]);
system("pause");
}
❺ 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语言求1到100阶乘代码
呐,这是求10000以内的阶乘
#include<stdio.h>
unsigned x[8000]={0},n,p,i,j,t;
int main()
{
while(scanf("%d",&n)!=EOF)
{
x[p=7998]=1;
for(i=1;i<=n;i++)
{ x[--p]=x[--p]=0;
for(j=7998;j>p;j--) {x[j]*=i; t=j+1; x[j]+=x[t]/100000; x[t]%=100000; }
while(!x[p]) p++;
} for(printf("%u",x[p++]);p<7999;p++) printf("%05u",x[p]); printf("\n");
}
return 0;
}
❼ 用C语言程序求100的阶乘
#include<stdio.h>
#define Maxlen 10000
#define N 100
int mult(int num[],int len,int n)
{
int i,rem=0;
for(i=0;i<len;i++)
{
rem+=num[i]*n;
num[i]=rem%10;
rem=rem/10;
}
if(rem>0)
{
num[len]=rem%10;
len++;
rem=rem/10;
}
return len;
}
main()
{
int num[Maxlen];
int len=1,i;
num[0]=1;
for(i=2;i<=N;i++)
len=mult(num,len,i);
for(i=len-1;i>=0;i--)
printf("%d",num[i]);
printf("\n");
}
❽ 用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;
}
❾ 1到100的阶乘 C语言程序
举例说明算法:
1!+2!+3!+……+n!
=1+2*(1+3*(1+4*(1+5(1+.(1+(n-1)*(1+n)).))))
不过当n=100貌似会溢出.因此要实现一个大数乘法的函数。
#include<stdio.h>
void main()
{
long sum;
int n=100;
sum=n;
while(n!=1)
{
sum+=1;
sum*=n-1;//使用大数乘法函数替代这里的处理
n--;
}
printf("%d\n",sum);
}
❿ 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();
}