密码

本文介绍了一个涉及大整数乘法的编程挑战,该挑战源于一个虚构的故事背景——破解天庭的粮食库密码。通过分析给出的C++代码,我们可以了解到如何高效地处理多位数的乘法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

分析

这题数据比较大,要用高精乘(水…)

程序

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char s[100000];
int a[100000],b[100000],c[100000];
int main()
{
    int n;
    scanf("%d",&n);
    scanf("%s",s);
    int l1=strlen(s);
    for(int i=0;i<l1;i++) 
        b[i]=s[l1-i-1]-'0';
    for (int k=1;k<n;k++)
    {
        scanf("%s",s);
        int l2=strlen(s);
        for(int i=0;i<l2;i++) 
            a[i]=s[l2-i-1]-'0';
        for(int i=0;i<l2;i++)
            for(int j=0;j<l1;j++) 
            {
                c[i+j]+=a[i]*b[j];
                c[i+j+1]+=c[i+j]/10;
                c[i+j]%=10;
            }
        l1=100000;
        while(l1>1&&c[l1-1]==0) 
            l1--; 
        for (int i=l1;i>=0;i--)
        {
            b[i]=c[i];
            c[i]=0;
        }
    }
    for(int i=l1-1;i>=0;i--) 
        printf("%d",b[i]);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值