求助求助,下面这道题怎么做?

题目描述

我军拦截敌军传递了2个数字串,后经侦查得知,这两个数字串中包含了一个很重要的密码,这个密码的破译方式为,用这两个数字串中的大数 – 小数,得到结果后将结果转换为16进制(转换时如需使用字母请使用大写字母),就是敌军想要传递的密码。

比如,敌军传递了下列两个数字串:

99999999999999999999999999999999999999973

99999999999999999999999999999999999999999

大数 – 小数的差值 = 26,转换为16进制的结果为1A,也就是1A就是敌军想要传递的密码。

请编程实现破译密码的过程。

输入格式

输入有2行,分别是2个不超过200位的整数,且已知2个整数的差是一个不超过18位的整数。

输出格式

输出按题意计算出的16进制数。

提示/说明

样例输入1:

99999999999999999999999999999999999999973

99999999999999999999999999999999999999999

 样例输出1:

1A

 样例输入2:

999999999

3847

 样例输出2:

3B9ABAF8

下面是我写的题解

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char a1[250],b1[250],c1[250];
    int a[250],b[250],c[250],lena,lenb,d=1,x=0,y=0,z=0,v=0,n=0;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    cin>>a1>>b1;
    if(strlen(a1)<strlen(b1)||(strlen(a1)==strlen(b1)&&strcmp(a1,b1)<0))
    {
        strcpy(c1,a1);
        strcpy(a1,b1);
        strcpy(b1,c1);
    }
    lena=strlen(a1);
    lenb=strlen(b1);
    for(int i=0;i<=lena-1;i++)
    {
        a[lena-i]=int(a1[i]-'0');
    }
    for(int i=0;i<=lenb-1;i++)
    {
        b[lenb-i]=int(b1[i]-'0');
    }
    while(d<=lena||d<=lenb)
    {
        if(a[d]<b[d])
        {
            a[d]+=10;
            a[d+1]--;
        }
        
        c[d]=a[d]-b[d];
        d++;
    }
    x=d;
    while((c[x]==0)&&(x>1))
    {
        x--;
    }
    for(int i=x;i>=1;i--)
    {
        y+=c[i]*pow(10,i-1);
    }
    while(y!=0)
    {
        n++;
        z=y%16;
        y/=16;
        c[n]=z;
        v++;
    }
    for(int i=v;i>=1;i--)
    {
        if((c[i]>=0)&&(c[i]<=9)) cout<<c[i];
        if(c[i]==10) cout<<"A";
        if(c[i]==11) cout<<"B";
        if(c[i]==12) cout<<"C";
        if(c[i]==13) cout<<"D";
        if(c[i]==14) cout<<"E";
        if(c[i]==15) cout<<"F";
    }
    cout<<endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值