练习40

来源:互联网 发布:游戏编程语言 编辑:程序博客网 时间:2024/04/28 08:57
  1. /*******************************************************************************
  2. 40. 一个整型变量只能用来存贮较小的 N!的值,当 N 较大时,可将阶乘值中的
  3.  每一个数字放在一个一维数组的一个元素中。使用这方法,打印:
  4.     ① N!的值;
  5.     ② N!-M!(M>N);
  6.     ③ N!+M!
  7.   ******************************************************************************/
  8. #include <stdio.h>
  9. #define N 1000
  10. void InitRs(int rs[])
  11. {
  12.     int i;
  13.     for(i=0; i<N; i++)
  14.         rs[i] = 0;
  15. }
  16. void CalcFact(int rs[],int n)
  17. {
  18.     int i,k;
  19.     int val,cf=0;
  20.     rs[0] = 1;
  21.     for(i=1; i<=n; i++)
  22.     {
  23.         for(k=0; k<N; k++)
  24.         {
  25.             val = rs[k] * i + cf;
  26.             cf = val / 10;
  27.             val = val % 10;
  28.             rs[k] = val;
  29.         }
  30.     }
  31. }
  32. void CalcAdd(int rs[],int rs1[],int rs2[])
  33. {
  34.     int i;
  35.     int val,cf=0;
  36.     for(i=0; i<N; i++)
  37.     {
  38.         val = rs1[i] + rs2[i] + cf;
  39.         cf = val / 10;
  40.         val = val % 10;
  41.         rs[i] = val;
  42.     }
  43. }
  44. void CalcSub(int rs[],int rs1[],int rs2[])
  45. {
  46.     int i;
  47.     int val,cf=0;
  48.     for(i=0; i<N; i++)
  49.     {
  50.         val = rs1[i] - rs2[i] + cf;
  51.         if(val<0)
  52.         {
  53.             cf = -1;
  54.             val = 10 + val;
  55.         }
  56.         else
  57.         {
  58.             cf = val / 10;
  59.             val = val % 10;
  60.         }
  61.         rs[i] = val;
  62.     }
  63. }
  64. void PrintRs(int rs[])
  65. {
  66.     int i=N-1;
  67.     while(i>=0 && rs[i]==0)
  68.         i--;
  69.     if(i<0)
  70.         printf("0/n");
  71.     else 
  72.     {
  73.         while(i>=0)
  74.         {
  75.             printf("%d",rs[i]);
  76.             i--;
  77.         }
  78.     }
  79.     printf("/n");
  80. }
  81. void main()
  82. {
  83.     int rs[N];
  84.     int rs1[N];
  85.     int rs2[N];
  86.     int m,n;
  87.     printf("请输入N和M的值:");
  88.     scanf("%d%d", &n ,&m);
  89.     InitRs(rs1);
  90.     InitRs(rs2);
  91.     printf("N! = ");
  92.     CalcFact(rs1,n);
  93.     PrintRs(rs1);
  94.     printf("M! = ");
  95.     CalcFact(rs2,m);
  96.     PrintRs(rs2);
  97.     printf("N! - M! = ");
  98.     InitRs(rs);
  99.     if(n >= m)
  100.     {
  101.         CalcSub(rs,rs1,rs2);
  102.         PrintRs(rs);
  103.     }
  104.     else 
  105.     {
  106.         CalcSub(rs,rs2,rs1);
  107.         printf("-");
  108.         PrintRs(rs);
  109.     }
  110.     printf("N! + M! = ");
  111.     InitRs(rs);
  112.     CalcAdd(rs,rs1,rs2);
  113.     PrintRs(rs);
  114. }
 
原创粉丝点击