问题描述 给定n和len,输出n!末尾len位。 输入格式 一行两个正整数n和len。 输出格式 一行一个字符串,表示答案。长度不足用前置零补全。 样例输入 6 5 样例输出 00720 数据规模和约定 n<=30, len<=10。
记:
高精度类型涉及到数据溢出,注意用数组保存
1 #include <stdio.h> 2 #define LEN 10 3 4 int main(void) 5 { 6 int n,k; 7 int i,j; 8 int carry; /*进位存储*/ 9 int arr[LEN+1] = {0};/*数组存阶乘值,防溢出*/ 10 scanf("%d %d",&n,&k); 11 arr[1] = 1; /*低位从1开始*/ 12 for (i = 1 ; i <= n ; i ++) 13 { 14 carry = 0; 15 for (j = 1 ; j <= k ; j ++) 16 { 17 arr[j] *= i; 18 arr[j] += carry; 19 carry = arr[j]/10; 20 if (arr[j] > 9) 21 { 22 arr[j] = arr[j]%10; 23 } 24 } 25 } 26 27 for (i = k ; i >= 1 ; i --) 28 { 29 printf("%d",arr[i]);/*从高位往低位输出*/ 30 } 31 32 return 0; 33 }