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();
}