C語言利用陣列計算超大整數的階乘程式碼#include <stdio.h> 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<=n; i++ ) //開始階乘,階乘元素從2開始依次"登場" { //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘 for( j=1, carry=0; j<=digit; 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 <stdio.h> 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<=n; i++ ) //開始階乘,階乘元素從2開始依次"登場" { //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘 for( j=1, carry=0; j<=digit; 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 <stdio.h> 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<=n; i++ ) //開始階乘,階乘元素從2開始依次"登場" { //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘 for( j=1, carry=0; j<=digit; 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 <stdio.h> 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<=n; i++ ) //開始階乘,階乘元素從2開始依次"登場" { //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘 for( j=1, carry=0; j<=digit; 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; }