RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1550581
Accepted
rotabor
rotabor
Asked:2023-11-10 03:56:51 +0000 UTC2023-11-10 03:56:51 +0000 UTC 2023-11-10 03:56:51 +0000 UTC

使用有限次数的操作从两个 Int32 获取 Int64

  • 772

Int64 作为两个 Int32 输入。是否有可能以某种方式获得十进制形式的字符串表示形式的原始数字,仅具有 Int32 和 + - * / MOD 操作、位操作、移位、循环、条件运算符?例如,您可以在一个 Int32 中获取低 9 位十进制数字,在另一个 Int32 中获取高十进制数字,并且可以忽略 4-5 位二进制数字的损失。

例:原数 78542365896558 输入为 18287(高位双字)和 298954606(低位双字)。输出是一个字符串或两个数字 78542 和 365896558。

它就是这样一台计算机——工业PLC。结构化文本编程语言是为了提供信息。真正的 - 只有浮点数(单精度)。有实数数组。还有一种字符串数据类型,只有字符串常量、连接以及数字到字符串的转换,反之亦然。SELSTR 函数 - 按索引选择五行之一。

结果必须表示为两个(或更多,如果需要)Int32(如上所述)或字符串。

您可以使用 c*(c、c#、c++)或 Python 对该算法进行建模。

我想了想,最后决定只离线使用 - 对于顶层接口,我编写了一个 COM 库,它使用两个 Int32 返回一个字符串。我想在控制器中实现这个。

如果有人对这项任务感兴趣,我可以将其用于 NNN 积分竞赛。

алгоритм
  • 1 1 个回答
  • 95 Views

1 个回答

  • Voted
  1. Best Answer
    Grundy
    2023-11-10T18:07:55Z2023-11-10T18:07:55Z

    为了简化问题,我们把一个数字想象成一组从高到低的数字,那么要从基数较小的系统转移到基数较大的系统,只需依次取数字,乘以基数,如果溢出,则添加一个新数字作为结果。

    算法:

    result = 0;
    FOR digit IN digits
        result = result * base + digit
    END FOR
    

    对于问题中的情况,当输入只有两个数字时,您可以选择 10 9量级的基数;在这种情况下,三个变量就足够了结果,这将起到数字的作用

    输入数字的处理将按顺序进行,先高后低。

    所以预先知道可以通过移位得到所需的二进制数的32位数字

    function conv(i1, i2) {
      var x = 0,
        y = 0,
        z = 0;
      console.log(i1.toString(2).padStart(32, '0'))
      console.log(i2.toString(2).padStart(32, '0'))
      for (var i = 32; i-- > 0;) { // проходим по всем битам начиная со старшего
        var c = (i1 & (1 << i)) !== 0; // значение бита
    
        var valX = x * 2 + c; // умножаем на текущее значение и прибавляем бит
        x = valX % 10 ** 9; // обновляем значение 
        var valY = y * 2 + (valX - x) / 10 ** 9; // если нужно переносим разряд
        y = valY % 10 ** 9
        z = z * 2 + (valY - y) / 10 ** 9;
      }
      // повтор для младшего разряда
      for (var i = 32; i-- > 0;) { // проходим по всем битам начиная со старшего
        var c = (i2 & (1 << i)) !== 0; // значение бита
        var valX = x * 2 + c; // умножаем на текущее значение и прибавляем бит
        x = valX % 10 ** 9; // обновляем значение 
        var valY = y * 2 + (valX - x) / 10 ** 9; // если нужно переносим разряд
        y = valY % 10 ** 9
        z = z * 2 + (valY - y) / 10 ** 9;
      }
      return [x, y, z] // возврат всех трех разрядов - если итоговое число занимает меньше - будут 0
    }
    
    console.log(conv(18287, 298954606))

    旋转器:

    所以这就是发生的事情: 在此输入图像描述

    '^/PARAM1' := 18287; '^/PARAM2' := 298954606;
    '^/RESX' := 0; '^/RESY' := 0; '^/RESZ' := 0;
    '^/SHIFT1' := 2147483648;
    WHILE '^/SHIFT1' > 0 DO
        '^/PARAMC' := ('^/PARAM1' & '^/SHIFT1') != 0 ? 1 : 0;
        '^/PARAMX' := '^/RESX' * 2 + '^/PARAMC';
        '^/RESX' := '^/PARAMX' % '^/CONSTE9'; 
        '^/PARAMY' := '^/RESY' * 2 + ('^/PARAMX' - '^/RESX') / '^/CONSTE9';
        '^/RESY' := '^/PARAMY' % '^/CONSTE9';
        '^/RESZ' := '^/RESZ' * 2 + ('^/PARAMY' - '^/RESY') / '^/CONSTE9';
        '^/SHIFT1' := SHR('^/SHIFT1',1);
    END_WHILE;
    '^/SHIFT1' := 2147483648;
    WHILE '^/SHIFT1' > 0 DO
        '^/PARAMC' := ('^/PARAM2' & '^/SHIFT1') != 0 ? 1 : 0;
        '^/PARAMX' := '^/RESX' * 2 + '^/PARAMC';
        '^/RESX' := '^/PARAMX' % '^/CONSTE9'; 
        '^/PARAMY' := '^/RESY' * 2 + ('^/PARAMX' - '^/RESX') / '^/CONSTE9';
        '^/RESY' := '^/PARAMY' % '^/CONSTE9';
        '^/RESZ' := '^/RESZ' * 2 + ('^/PARAMY' - '^/RESY') / '^/CONSTE9';
        '^/SHIFT1' := SHR('^/SHIFT1',1);
    END_WHILE;
    
    • 2

相关问题

  • Golang 中的堆栈实现

  • 二部图中的最大匹配

  • 求两个数的差模为 m 的倍数的算法

  • 如何将平面几何对象表示为矢量以应用于人工神经网络的输入?[关闭]

  • 如何正确执行矩形的 Delaunay 三角剖分?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5