每日一题 - 240412 - X进制减法

本文介绍了如何使用贪心算法解决X进制的减法规则,并展示了代码实现,涉及进制转换操作,重点讨论了时间复杂度为O(N)的过程。

  • TAG - 芝士水题、算法 − 【进制转换、贪心】 芝士水题、算法 - 【进制转换、贪心】 芝士水题、算法【进制转换、贪心】
  • 时间复杂度 - O ( N ) O(N) O(N)
//
#include <bits/stdc++.h>
using namespace std;
#define int long long 

const int MOD = 1e9 + 7;
vector<int> A, B;

void solve() {
    int n, m, x;
    scanf("%lld", &n);

    scanf("%lld", &m);
    while (m--) {
        scanf("%lld", &x);
        A.push_back(x);
    }
    scanf("%lld", &m);
    while (m--) {
        scanf("%lld", &x);
        B.push_back(x);
    }

    reverse(A.begin(), A.end());
    reverse(B.begin(), B.end());

    int maxx = max(A.size(), B.size());
    A.resize(maxx);
    B.resize(maxx);
    int ans = 0, r = 1; 
    for (int i = 0; i < maxx; i++) {
        ans = (ans + r * (A[i] - B[i])) % MOD;
        r = r * max(2LL, max(A[i], B[i]) + 1) % MOD;
    }                                   // + 1
    printf("%lld\n", ans);
}

signed main() {
    int t = 1;
    // scanf("%d", &t);
    while (t--) solve();
    return 0;
}

实现细节

  • `

参考示意图

  • `

参考链接

  • `

作者 | 乐意奥AI

好的,让我们来了解一下 `-A0` 和 `A0` 的16进制补码表示。 ### 一、基础知识回顾 **1. 补码的概念** - **正数的补码**:对于无符号整数或正值来说,在二进制下其原码、反码和补码都是相同的。 - **负数的补码**:对于有符号负值,则需要通过求取该数值绝对值对应的二进制形式,并对其进行按位取反再加1的操作得到最终结果作为补码表达式。 **2. 十六进制转二进制** - 每一位十六进制数字对应四位二进制数字。例如,“A”代表“10”,转换成二进制就是`1010`;而“F”则是`1111`。 --- ### 二、计算过程详解 #### (1)解析给定数据“A0” - 首先将 “A0”的每个字符分别转化为4位二进制串: - \( A = (10)_{10} \rightarrow (1010)_2\) - \( 0 = (0000)_2\) 因此我们得出\( A0_{16}\)= `(1010 0000)` 或简写作`(1010_0000)_2` #### (2)对"A0"求相反数(-A0),并获得它的8位机器字长下的补码表示: ##### 步骤① 将 "A0" 转换为十进制以便处理 \[A0_{16}=160_{10}\] 因为这是一个带负号的情况,所以我们现在讨论的是 "-160" ##### 步骤② 然后确定它在一个特定范围内的补码形式(假设采用常见的8比特系统): 首先找到+160在8bit情况下的溢出问题——实际上由于超过了所能直接表述的最大非负整数(\[7FH=127D\])所以这里应该被视为超出界限; 但在某些场合如学习目的允许的话,我们可以假想一下如果真的存在这样的环境会怎么展示这个值: 1. 先写出160的8位二进制表示(虽然现实中无法存储),即`1010 0000` 2. 因为我们是在做减法运算(相当于加上一个大得足以翻转最高有效位MSB的量级),于是就等价于对上述序列每一位都做了反转操作后再累加1: ```text 原始值 : 1010 0000 反码 : 0101 1111 加上1后的补码: 0110 0000 ``` 综上所述, - 对应到具体的八位系统内实际呈现出来的效果可能是非法状态或者循环绕回到某个合法区间,比如这里的-(96),但这取决于具体硬件架构如何设计以及是否支持这种超界输入场景。 > 注意:通常情况下,当涉及到计算机内部的数据表示时,尤其是在固定宽度的寄存器环境中,超过最大容量的部分会被截断或导致其他异常行为。所以上面所说的"-160"并不真正存在于标准8位体系结构中。 ### 总结 对于正常的8-bit环境下: - `"A0"` 的16进制补码还是自身(`A0`); - "`-A0`" 从理论上讲应该是`"(FF-) + (逆序+A)"`, 也就是`0x60`(即十进制96). 但是要注意这只是一个理论性的解释,在真实的编程实践中你应该依据语言特性及目标平台的具体规则来进行正确的编码工作!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值