zoukankan      html  css  js  c++  java
  • N的阶乘(10000) 51 nod——1057 (大数)

    像这些大整数加法或者乘法什么的思想都一样,就是截位存取,累积进位,最后逆序输出就可以啦

    PS:小生是用10000来存取的,300MS就能A,如果单个存取有点危险,题目时间限制好像是1000ms,大家可以自己试试咯。(核心思想就是进位部分还有最后的边界的控制,逆序输出注意一下题目格式就可以了。  大整数加法的话因为牵扯长度问题所以只能按照字符串来存取并计算,一般这种不超过int的大整数乘除都可以用这种方法的)

    AC 代码及详细解释如下:

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 using namespace std;
     5 int a[30005];
     6 int main()
     7 {
     8     int t,n,i,j,k,m,l;
     9    while(~scanf("%d",&n))
    10    {
    11        memset(a,0,sizeof(a));
    12        a[0]=1;
    13        m=0;
    14     for(i=2;i<=n;i++)
    15     {
    16         for(j=0;j<=m;j++)//每一位都相乘前边所有存取的
    17         {
    18             a[j]*=i;
    19         }
    20         for(l=1;l<=m;l++)//判断进位
    21         {
    22             if(a[l-1]>=10000)
    23             {
    24                 a[l]+=a[l-1]/10000;
    25                 a[l-1]%=10000;
    26             }
    27 
    28 
    29         }
    30         while(a[m]>=10000)//判断最后一位是否超过10000
    31         {
    32             a[m+1]=a[m]/10000;
    33             a[m]%=10000;
    34             m++;
    35         }
    36     }
    37     for(i=m;i>=0;i--)//逆序输出
    38     {
    39         if(i==m)
    40             printf("%d",a[i]);
    41         else
    42             printf("%04d",a[i]);
    43     }
    44     printf("
    ");
    45    }
    46    return 0;
    47 }
  • 相关阅读:
    Windows 2008R2 安装PostgreSQL 11.6
    Redis-基础介绍
    SQL Server中的GAM页和SGAM页
    linux读写相关
    String 和 Stringbuild
    JVM(六)如何执行方法调用
    dubbo学习(三)实现细节
    dubbo学习(二)SPI
    spring boot
    MySQL学习(二十一)锁
  • 原文地址:https://www.cnblogs.com/nr1999/p/8443023.html
Copyright © 2011-2022 走看看