加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Very Easy !!! (大数模拟加法乘法)

发布时间:2020-12-14 04:52:05 所属栏目:大数据 来源:网络整理
导读:大数乘法+加法。 这是借鉴网上的模板。 题目链接:vjudgeUVA-10523 #includecstdio #includeiostream #includecmath #includecstring #includealgorithm using namespace std ; const int maxn= 10010 ; const int base= 10 ; struct inter{ int num[maxn];

大数乘法+加法。
这是借鉴网上的模板。
题目链接:vjudgeUVA-10523

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10010;
const int base=10;
struct inter{
    int num[maxn];
    int cnt; 
};
inter a,b;
//大数模拟加减法 ---模板可套用 
//幂运算+求和 
void muti(int k)// 
{
    for(int i=0;i<a.cnt;i++)
    {
        a.num[i]*=k;
    }
    int i;
    for(i=0;i<a.cnt;i++)
    {
        a.num[i+1]+=a.num[i]/base;
        a.num[i]%=base;
    }//剩余之后 
    while(a.num[i])
    {
        a.num[i+1]+=a.num[i]/base;
        a.num[i]%=base;
        i++;
    } 
    while(i>=0&&!a.num[i]) i--;//去零 
    a.cnt=i+1; 
}
inter add(inter &x,inter &y)//相加 
{
    inter tmp;
    memset(tmp.num,0,sizeof(tmp.num));
    tmp.cnt=0;
    for(int i=0,j=0,g=0; ; i++,j++)  
    {
        if(g==0 && i>=x.cnt && j>=y.cnt) break;  
        int t = g;  
        if(i<x.cnt) t+= a.num[i];  
        if(j<y.cnt) t+= b.num[i];  //这个挺好
        tmp.num[tmp.cnt++] = t%base;  
        g = t/base;  
    } 
    return tmp; 
} 
int main()
{
    int N,A;
    while(scanf("%d%d",&N,&A)!=EOF)
    {
        if(A==0)
        {
            printf("0n");
            continue;
        }
        memset(a.num,sizeof(a.num)); 
        memset(b.num,sizeof(b.num));
        b.cnt=a.cnt=0;
        for(int i=1;i<=N;i++)
        {
            memset(a.num,sizeof(a.num));
            a.cnt=1,a.num[0]=1;
            for(int j=1;j<=i;j++)
                  muti(A);//累乘 
            muti(i);
            b=add(a,b);
        }
        for(int i=b.cnt-1;i>=0;i--)
        printf("%d",b.num[i]);
        printf("n");
    }
    return 0;
}

参考链接1
参考链接2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读