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

如何在不使用 Convert.To() 方法的情况下将基数为 10 的负数转换为基数为 8 的转换?

如何解决如何在不使用 Convert.To() 方法的情况下将基数为 10 的负数转换为基数为 8 的转换?

如何在不使用 Convert.To() 方法的情况下以八进制表示十进制负数?

public static string Getoctal(int number)
{     
   int base = 8;    
}

例如:

-3(基数 10)= 37777777775(基数 8)

但是我应该使用什么算法来得到这个结果?

我的任务的测试用例:

        [TestCase(-3,8,ExpectedResult = "37777777775")]
        [TestCase(-127,ExpectedResult = "37777777601")]
        [TestCase(-675432,ExpectedResult = "37775330630")]
        [TestCase(-1908345,ExpectedResult = "37770560607")]
        [TestCase(int.MinValue,ExpectedResult = "20000000000")]
        [TestCase(-3,16,ExpectedResult = "FFFFFFFD")]
        [TestCase(-127,ExpectedResult = "FFFFFF81")]
        [TestCase(-675432,ExpectedResult = "FFF5B198")]
        [TestCase(-1908345,ExpectedResult = "FFE2E187")]
        [TestCase(int.MinValue,ExpectedResult = "80000000")]
        [TestCase(1908345,10,ExpectedResult = "1908345")]
        [TestCase(int.MaxValue,ExpectedResult = "2147483647")]
        public string GeTradix_Tests(int number,int radix) => number.GeTradix(radix);

解决方法

您可以随时访问 source.dot.net here 上的 Convert 类的源代码并遵循 ParseNumberIntToString 方法:

public static string IntToString(int n,int radix,int width,char paddingChar,int flags)
{
    Span<char> buffer = stackalloc char[66]; // Longest possible string length for an integer in binary notation with prefix

    if (radix < MinRadix || radix > MaxRadix)
        throw new ArgumentException(SR.Arg_InvalidBase,nameof(radix));

    // If the number is negative,make it positive and remember the sign.
    // If the number is MIN_VALUE,this will still be negative,so we'll have to
    // special case this later.
    bool isNegative = false;
    uint l;
    if (n < 0)
    {
        isNegative = true;
    (...)

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