zoukankan      html  css  js  c++  java
  • 高精度乘

    清华大学的机试题,求N!(1<=n<=1000)

    其实是一个大数和一个小于等于4位的int相乘

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    struct BigInteger
    {
        int num[1000];
        int size;
        BigInteger()
        {
            memset(num,0,sizeof(num));
            size=0;
        }
        BigInteger(char str[])
        {
            memset(num,0,sizeof(num));
            size=0;
            int len=strlen(str);
            int j=0,w=1,tmp=0;
            for(int i=len-1; i>=0; i--)
            {
                tmp+=w*(str[i]-'0');
                j++;
                w*=10;
                if(j==4||i==0)
                {
                    num[size++]=tmp;
                    tmp=j=0;
                    w=1;
                }
            }
        }
    
        BigInteger operator +(const BigInteger &a)const
        {
            BigInteger res;
            int up=0;
            for(int i=0; i<size||i<a.size; i++)
            {
                int tmp=num[i]+a.num[i]+up;
                up=tmp/10000;
                tmp=tmp%10000;
                res.num[i]=tmp;
                res.size++;
            }
            if(up)
                res.num[res.size++]=up;
            return res;
        }
    
        BigInteger operator *(int x)const
        {
            BigInteger res;
            int up=0,tmp=0;
            for(int i=0; i<size; i++)
            {
                tmp=num[i]*x+up;
                up=tmp/10000;
                tmp=tmp%10000;
                res.num[res.size++]=tmp;
            }
            if(up)
                res.num[res.size++]=up;
            return res;
        }
        
        void print()
        {
            for(int i=size-1; i>=0; i--)
            {
                if(i==size-1)
                    printf("%d",num[i]);
                else
                    printf("%04d",num[i]);
            }
            printf("
    ");
        }
    };
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            char a[5];
            BigInteger res("1");
            for(int i=2; i<=n; i++)
            {
                res=res*i;
            }
            res.print();
        }
        return 0;
    }
  • 相关阅读:
    00-深入理解C#读书笔记说明
    00-翻译IdentityServer4的目的
    IdentityServer4-介绍大纲(译文)
    (CLR-Via-C#) 类型基础
    委托
    字符串匹配算法
    weight_decay(权重衰减)
    文本主题模型--LDA
    词义消歧
    模型融合的结合策略
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/8543442.html
Copyright © 2011-2022 走看看