2 条题解

  • 0
    @ 2023-9-10 12:44:46

    嗨嗨嗨,python来咯 其实我不会c++的高精度


    def crack_password(num1, num2):
        diff = abs(int(num1) - int(num2))
        hex_password = hex(diff)[2:].upper()
        return hex_password
    
    num1 = input()
    num2 = input()
    password = crack_password(num1, num2)
    print(password)
    
    • 0
      @ 2022-12-21 11:32:25

      本题思路:

      1. 高精度减法

      2. 将存储结果的数组转换成数字

      3. 进制转换

        具体细节见注释

      • 高精度减法:

        lena = a.length();
        lenb = b.length();
        lenans = max(lena , lenb);
        //判断两数大小,若a<b则交换两数与其长度(swap函数)
        if (lena < lenb || (lena == lenb && a < b))
        {
            swap(a , b);
            swap(lena , lenb);
        }
        //存储两数
        for (int i = 0 ; i < lena ; i++)
        {
            numa[i] = a[lena - i - 1] - '0';
        }
        for (int i = 0 ; i < lenb ; i++)
        {
            numb[i] = b[lenb - i - 1] - '0';
        }
        //做减法
        for (int i = 1 ; i <= lenans ; i++)
        {
            numans[i] = numa[i - 1] - numb[i - 1];
        }
        //退位问题
        for (int i = 1 ; i <= lenans ; i++)
        {
            if (numans[i] < 0)
            {
                numans[i] += 10;
                numans[i + 1]--;
            }
        }
        
      • 将存储结果的数组转换成数字:

        //求出最高位
        int top = lenans;
        while (numans[top] == 0) top--;
        //转换成数字
        for (int i = top ; i >= 1 ; i--)
        {
            //第一个细节,这里不能写成num += numans[i] * pow(10 , i - 1);,否则结果可能错误(真奇怪)
            long long d = numans[i] * pow(10 , i - 1);//第二个细节,这里是pow(10 , i - 1),不是pow(10 , i)
            num += d;
        }
        
      • 进制转换

        //还是用栈临时存储
        stack<char> h;
        //进制转换
        while (num > 0)
        {
            if (num % 16 > 9) h.push(num % 16 - 10 + 'A');
            else h.push(num % 16 + '0');
            num /= 16;
        }
        //第三个细节,若栈为空,则说明num=0,直接+'0'即可
        if (h.empty()) ans += '0';
        //翻转
        while (!h.empty())
        {
            ans += h.top();
            h.pop();
        }
        
      • 1

      信息

      ID
      728
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      27
      已通过
      11
      上传者