• N!大整数阶乘问题


    问题:求N!阶乘,1<=N<10000

    思路:windows下面visual 6.0中c一个整型占4个字节(自己可以try一下,printf("%d", sizeof(int))。N过大会使得结果溢出。

      这里我采用的是一个整型数组来存储结果int array_result[40000]数组每个元素表示结果的每一位

      

      计算过程

      1.遍历从1-N的每一个数i

      2.用i乘以array_result中的每一位j得到结果temp

      3.对temp对10取余数temp % 10放到array_retult[j]中,对carry = temp / 10作为进位放到前一位。

      4.最后输出结果

    代码如下

     1 /*
     2  *
     3  *求N!的值 0<N<10000大整数的阶乘问题
     4  *思路:用4w的数组表示结果的每一位数,
     5  *每一次阶乘,数组的每一位乘以i 求余数放到该位 , 剩下的放到作为进位放到下一位(这里进位可能不是1位数,可能是多位数)
     6  */
     7 #include <stdio.h>
     8 #include <stdlib.h>
     9 #include <string.h>
    10 
    11 #define SIZE 40000                                                //存放结果集的数组大小
    12 
    13 int main()
    14 {
    15     int num;                                                    //N
    16     int array_result[SIZE];
    17     int i = 0;
    18     int j = 0;
    19     
    20     while(scanf("%d", &num) != EOF)                                //接收用户输入
    21     {
    22         memset(array_result, 0, sizeof(array_result));            //初始化结果数组
    23         array_result[0] = 1;
    24 
    25         i = 2;
    26         for(; i <= num; i ++)                                    //处理每一次输入的num
    27         {
    28             int carry = 0;
    29             j = 0;
    30             
    31             for(; j < SIZE; j ++)
    32             {
    33                 int temp = array_result[j] * i + carry;            //每一位 乘以 i
    34                 array_result[j] = temp % 10;
    35                 carry = temp / 10;                
    36             }
    37         }
    38         for(i = SIZE - 1; i >= 0; i --)                            //找到结果的最高位
    39         {
    40             if(array_result[i])
    41             {
    42                 break;
    43             }
    44         }
    45         j = 0;
    46         
    47         for(j = i; j >= 0; j --)                                //输出结果
    48         {
    49             printf("%d", array_result[j]);
    50         }
    51         printf("
    ");                                            //输出换行符
    52         
    53   }
    54 }

      

  • 相关阅读:
    Vue源码学习(二)——生命周期
    Android MediaPlayer
    iOS项目开发实战——iOS网络编程获取网页Html源码
    iOS 开发之IPad的设计与实现
    Netty In Action中文版
    Valid Palindrome
    Jetty 类载入问题处理
    JSONArray和JSONObject的简单使用
    ExtAspNet依据Grid导出Excel
    C++中的指针、数组指针与指针数组、函数指针与指针函数
  • 原文地址:https://www.cnblogs.com/luckygxf/p/3662808.html
Copyright © 2020-2023  润新知