WooKinson

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
问题描述
  给定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 }

 

posted on 2018-04-18 12:41  WooKinson  阅读(591)  评论(0编辑  收藏  举报