C語言利用陣列計算超大整數的階乘程式碼
#include
int main()
{
int n;
int a[9000]; //確保儲存最終運算結果的陣列足夠大
int digit = 1; //位數
int temp; //階乘的任一元素與臨時結果的某位的乘積結果
int i, j, carry; //carry:進位
printf("please in put n:\n");
scanf("%d",&n);
a[0] = 1; //將結果先初始化為1
for ( i=2; i
{ //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘
for( j=1, carry=0; j
temp = a[j-1] * i + carry; //相應階乘中的一項與當前所得臨時結果的某位相乘(加上進位)
a[j-1] = temp % 10; //更新臨時結果的位上資訊
carry = temp / 10; //看是否有進位
}
while(carry)
{ //如果有進位
a[++digit-1] = carry % 10; //新加一位,新增資訊。位數增1
carry = carry / 10; //看還能不能進位
printf("n ! = "); //顯示結果
for(j = digit; j >=1;j--)
printf("%d",a[j-1]);
printf("\n");
return 0;
C語言利用陣列計算超大整數的階乘程式碼
#include
int main()
{
int n;
int a[9000]; //確保儲存最終運算結果的陣列足夠大
int digit = 1; //位數
int temp; //階乘的任一元素與臨時結果的某位的乘積結果
int i, j, carry; //carry:進位
printf("please in put n:\n");
scanf("%d",&n);
a[0] = 1; //將結果先初始化為1
for ( i=2; i
{ //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘
for( j=1, carry=0; j
{
temp = a[j-1] * i + carry; //相應階乘中的一項與當前所得臨時結果的某位相乘(加上進位)
a[j-1] = temp % 10; //更新臨時結果的位上資訊
carry = temp / 10; //看是否有進位
}
while(carry)
{ //如果有進位
a[++digit-1] = carry % 10; //新加一位,新增資訊。位數增1
carry = carry / 10; //看還能不能進位
}
}
printf("n ! = "); //顯示結果
for(j = digit; j >=1;j--)
{
printf("%d",a[j-1]);
}
printf("\n");
return 0;
}
#include