zoukankan      html  css  js  c++  java
  • JZOJ2020年8月11日提高组T1 密码

    JZOJ2020年8月11日提高组T1 密码

    题目

    Description

    在浩浩茫茫的苍穹深处,住着上帝和他的神仆们,他们闲谈着下界的凡人俗事,对人世间表现的聪明智慧,大加赞赏。今天他们正在观赏大地风光人情之际,忽然从遥远的东海之滨传来一阵欢笑声,上帝纵目望去,只见中山纪念中学内聚集了全中山市的中小学精英学生,他们要干什么呢?
    原来他们都在做一种破译密码的游戏,人们发现:将密码棒上的数字全部相乘,就是开启天庭司粮库密码锁的密码。
    如:12×34×56=22848,则22848就是一组有效的密码。
    “太简单了!”人们高呼起来,继续探索着。
    “这不过是早期的密码系统而已。”上帝轻蔑地环顾着神仆们说道。
    可是,当人们演算了123×456×789=44253432后,上帝的神色喀什不对了,要知道,44253432是一个特别的数字,这可是天庭的机密,是谁将这些机密泄露给世人的呢?
    于是,上帝搬出一张牌,对司粮库主管得墨忒耳说:“将这张牌打出去,看看他们还逞能不?”
    这是天庭的其中一张王牌,但平凡得很,只不过将密码的位数增大而已,可是难就难看在看到文件:password.in中的数字后,必须在1秒内将密码输出到文件:password.out中,否则这组密码就失效了。
    上帝还是仁慈的,没有将更难得牌打出来,他想把天庭的粮食恩慈人间,但他绝不会将好处给那些不动脑子的人。现在请你解开天庭司粮库密码锁的密码,帮助人们获得天庭恩赐的粮食。

    Input

    输入文件password.in的第一行只有一个正整数n,表示密码共有n个乘积因子。
    第二行至第n+1行共n行,每行有一个小于1×10^24的正整数。这n个数均为密码的乘积因子。

    output

    输出文件password.out只有一行,该行只有一个正整数,为求得的密码值。

    Sample Input

    3
    12
    34
    56

    Sample Output

    22848

    Data Constraint

    30%的数据,1≤n≤6,且输入的每个乘积因子均小于1000。
    70%的数据,1≤n≤20。
    100%的数据,1≤n≤100。

    题解

    题意

    给出(n)个小于(10^{24})的数,求乘积

    分析

    高精度乘法模板题

    Code

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int n,i,j,l,x,ans[100005],a[100005],c[100005];
    char ch;
    int main()
    {
        scanf("%d",&n);
        ans[0]=1;
        ans[1]=1;
        while (n)
        {
            memset(c,0,sizeof(c));
            memset(a,0,sizeof(a));
            l=0;
            ch=getchar();
            while (ch<'0'||ch>'9') ch=getchar();
            while (ch>='0'&&ch<='9')
            {
                l++;
                a[l]=ch-'0';
                ch=getchar();
            }
            for (i=1;i<=l;i++)
                c[i]=a[l-i+1];
            c[0]=l;
            for (i=1;i<=ans[0];i++)
            {
                a[i]=ans[i];
                ans[i]=0;
            }
            a[0]=ans[0];
            ans[0]=0;
            for (j=1;j<=c[0];j++)
            {
                x=0;
                for (i=1;i<=a[0];i++)
                {
                    ans[i+j-1]=ans[i+j-1]+a[i]*c[j]+x;
                    x=ans[i+j-1]/10;
                    ans[i+j-1]%=10;
                }
                ans[i+j-1]=x;
            }
            ans[0]=i+j;
            while (ans[ans[0]]==0&&ans[0]>1)
                ans[0]--;
            n--;
        }
        for (i=ans[0];i;i--)
            printf("%d",ans[i]);
        return 0;
    }
    
  • 相关阅读:
    获取数字的位数
    使用json把php数据传给js处理
    Java实现带括号优先级的计算器
    Java使用正则表达式解析LRC歌词文件
    Android开发环境搭建:离线安装ADT插件和安装SDK
    【转】C语言快速幂取模算法小结
    【转】Java高手真经全套书籍分享
    10.19stark组件开发(三)
    10.18正式开发stark组件*(三)
    10.17正式开发stark项目(二)
  • 原文地址:https://www.cnblogs.com/Livingston/p/13479579.html
Copyright © 2011-2022 走看看