微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在solidity中反转uint的数字?

如何解决如何在solidity中反转uint的数字?

我正在尝试编写一个函数来反转 solidity 智能合约中 uint 的数字。

我看到 this answer here 显示了如何通过从后到前循环传递字符串的字节来稳定地反转 字符串,但由于我只关心整数,我想知道如果有一种方法可以只使用整数,并且能够适当地处理溢出。

谢谢!

解决方法

四处搜索我发现 this answer 用 C 语言解决了这个问题。我能够调整它以在 Solidity 中工作。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Reverse {
    function reverse_recurse(uint i,uint r) internal returns(uint) {
      if (i != 0) {
        uint least_digit = i % 10;
        if (r >= type(uint).max / 10 && (r > type(uint).max / 10 || least_digit > type(uint).max % 10)) {
          return 0; /// Overflow
        }
        r = reverse_recurse(i / 10,r * 10 + least_digit);
      }
      return r;
    }
    
    // Reverses digits in a uint,overflow returns 0
    function reverse_int(uint i) public returns(uint) {
      return reverse_recurse(i,0);
    }
}
 decoded input  { "uint256 i": "12345" }
 decoded output { "0": "uint256: 54321" } 

与 C 解决方案不同,这仅适用于无符号整数,因为这正是我所需要的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。