Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将数字反转为整数而不是字符串?_C#_Algorithm - Fatal编程技术网

C# 如何将数字反转为整数而不是字符串?

C# 如何将数字反转为整数而不是字符串?,c#,algorithm,C#,Algorithm,我遇到了一个问题“一个人怎么能把一个数字反转成整数而不是字符串?”谁能帮我找到答案?反转应该反转数字的小数位数,即使用10为基数。类似这样的吗 using System; public class DoWhileDemo { public static void Main() { int num; int nextdigit; num = 198; Console.WriteLine("Number: " + num); Co

我遇到了一个问题“一个人怎么能把一个数字反转成整数而不是字符串?”谁能帮我找到答案?反转应该反转数字的小数位数,即使用10为基数。

类似这样的吗

using System; 

public class DoWhileDemo {   
  public static void Main() { 
    int num; 
    int nextdigit; 

    num = 198; 

    Console.WriteLine("Number: " + num); 

    Console.Write("Number in reverse order: "); 

    do { 
      nextdigit = num % 10; 
      Console.Write(nextdigit); 
      num = num / 10; 
    } while(num > 0); 

    Console.WriteLine(); 
  }   
}
public int ReverseInt(int num)
{
    int result=0;
    while (num>0) 
    {
       result = result*10 + num%10;
       num /= 10;
    }
    return result;
}
作为一句粗俗的一句话(更新:用本杰明的评论来缩短它):

速度更快的四分之一班轮:

public static int ReverseOneLiner(int num)
{
    for (int result=0;; result = result * 10 + num % 10, num /= 10) if(num==0) return result;
    return 42;
}
它不是一行,因为我必须包含
return42。C#编译器不让我编译,因为它认为没有代码路径返回值

另外,如果你写了这样的代码,而一个同事抓住了它,那么他/她对你所做的一切都是你应得的。小心

编辑:我想知道LINQ one liner的速度有多慢,所以我使用了以下基准代码:

public static void Bench(Func<int,int> myFunc, int repeat)
{
    var R = new System.Random();
    var sw = System.Diagnostics.Stopwatch.StartNew();
    for (int i = 0; i < repeat; i++)
    {
        var ignore = myFunc(R.Next());
    }
    sw.Stop();
    Console.WriteLine("Operation took {0}ms", sw.ElapsedMilliseconds);
}

乘以-1?请精确回答您的问题…

这应该可以做到:

int n = 12345;
int left = n;
int rev = 0;
while(Convert.ToBoolean(left)) // instead of left>0 , to reverse signed numbers as well
{
   int r = left % 10;   
   rev = rev * 10 + r;
   left = left / 10;  //left = Math.floor(left / 10); 
}

Console.WriteLine(rev);
耶!一种华丽的方式。(不,真的。我希望这更多的是一个“我该怎么做…”的问题,而不是你在生产中真正需要的东西)


你不能。由于计算机在任何情况下都以十六进制进行思考,因此有必要将数字标记为阿拉伯语格式,这在语义上与转换为字符串相同。

//
    /// <summary>
    /// Reverse a int using its sting representation.
    /// </summary>
    private int ReverseNumber(int value)
    {
        string textValue = value.ToString().TrimStart('-');

        char[] valueChars = textValue.ToCharArray();
        Array.Reverse(valueChars);
        string reversedValue = new string(valueChars);
        int reversedInt = int.Parse(reversedValue);

        if (value < 0)
           reversedInt *= -1;

        return reversedInt;
    }
///使用int的sting表示法反转int。 /// 私有整数反向枚举器(整数值) { 字符串textValue=value.ToString().TrimStart('-'); char[]valueChars=textValue.ToCharArray(); 数组。反向(valueChars); string reversedValue=新字符串(valueChars); int reversedInt=int.Parse(reversedValue); 如果(值<0) 反向T*=-1; 反向返回; }
检查以下简单易懂的内容-

public int reverseNumber(int Number)
{
  int ReverseNumber = 0;
  while(Number > 0)
  {
    ReverseNumber = (ReverseNumber * 10) + (Number % 10);
    Number = Number / 10;
  }
  return ReverseNumber;
}

参考:旧线程,但我没有看到这种变化:

        int rev(int n) {
            string str = new String(n.ToString().Reverse().ToArray());
            return int.Parse(str);
        }

我研究了以下解决方案。但是当n为负时呢

假设n=-123456

这里有一个我添加到它的调整来处理负数,假设它会以同样的方式威胁负数麻木

        int reverse = 0;
        bool isNegative = false;

        if (n < 0)
            isNegative = true;

        n = Math.Abs(n);
        while (n > 0)
        {
            int rem = n % 10;
            reverse = (reverse * 10) + rem;
            n = n / 10;
        }

        if (isNegative)
            reverse = reverse * (-1);

        return reverse;
int reverse=0;
bool为阴性=假;
if(n<0)
isNegative=true;
n=数学Abs(n);
而(n>0)
{
int-rem=n%10;
反向=(反向*10)+rem;
n=n/10;
}
如果(为负)
反向=反向*(-1);
反向返回;
最短解决方案:

        int reverse=0;
        int number = 21;

        while (number > 0)
        {
            reverse = number % 10;
            Console.Write(reverse);
            number = number / 10;  
        }

根据Pritam Karmakar的评论, 是,当给定的数字末尾为0时,此选项将不起作用。 如果您将数字传递为150,它将返回51而不是051。 所以我写了代码,按照用户输入的相反顺序显示数字,请检查这个

int reverseNum = 0, reminder, num;
        Console.WriteLine("Enter Number to Reverse:");
        int.TryParse(Console.ReadLine(), out num);
        bool isZero = false;
        int cnt=0;
        while (num > 0)
        {
            reminder = num % 10;
            reverseNum = (reverseNum * 10) + reminder;
            num = num / 10;
            if (reverseNum == 0)
                isZero = true;                
            cnt++;
        }
        if (isZero)
        {
            Console.WriteLine(reverseNum.ToString().PadLeft(cnt, '0'));
        }
        else
        {
            Console.WriteLine(reverseNum);
        }
        Console.ReadKey();
static void Main(字符串[]args)
{
Console.WriteLine(“请输入号码”);
int number=Convert.ToInt32(Console.ReadLine());
控制台写入线(反向操作(编号));
Console.WriteLine(反向草书(数字));
Console.ReadLine();
}
公共静态整数反转草书(整数编号)
{
整数余数=数字%10;
数字=数字/10;
如果(数字<1)
返回剩余部分;
返回ReverseRecursive(number)+余数*Convert.ToInt32(Math.Pow(10,number.ToString().Length));
}
公共静态整数反向操作(整数编号)
{
int=0;
而(数量>0)
{
反向=反向*10+(数字%10);
数字=数字/10;
}
反向返回;
}
一个新的:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        int i = 234;
        int j = -123;
        Console.WriteLine(reverse(i));
        Console.WriteLine(reverse(j));
    }

    static int reverse(int i)
    {
        int sign = i / Math.Abs(i);
        var abs = string.Concat(Math.Abs(i).ToString().Reverse());
        return int.Parse(abs) * sign;
    }
}

@jerjer@cfern建议的解决方案是完美的,但它不适用于负整数,如-1234507

解决方案:如果数字为负整数,则在调用方法ReverseInt(-1234507)后乘以-1


你可以这样做

Convert.ToInt32(new string(num.ToString().Reverse().ToArray()));

如果你的意思是反转数字,那么你基本上是反转字符串-转换为字符串,反转,转换回…我认为它看起来更像Euler项目。问题4,确切地说:虽然一行程序效率很低。当然,这就是为什么我称它为hackish。更奇怪的是,ToCharArray()是多余的,您还可以从聚合中的select执行字符到整数的转换,从而节省水平空间。:)有关纯字符串版本,请参见下面的示例。@cfern如果数字为负数,您会错过一些检查。。。我大学时的老师会对这件事大惊小怪的-大便。如果在60秒内编写代码,就会发生这种情况。我想知道如何定义负数的倒数。Rev(-1234)=-4321?事实上,正如我在问题行中提到的……我在一个网站上遇到了这个问题,他们在那里发布了多个面试问题。所以我也对问题行感到困惑。非常感谢,但我认为当给定的数字末尾有0时,这将不起作用。就像40R一样,在while循环中,你在哪里声明了r?只是想一想,我知道它没有专门提到负数,但要支持反向负数,你必须勾选左边=while循环中的0,否则当条件为left>0时,它将不会进入。@jerjer取决于您想要什么。如果是您想要的数字,那么前导零将丢失,再次反转它显然也会丢失前导零。但是,如果您对数字感兴趣:反转frickin'字符串!毕竟,数字只不过是以10为基数编码的数字的字符表示。由于数学中很少有这样的应用,所以这种反转是有意义的,你可以说字符串反转应该一直应用。它不适用于负数。如果您按如下方式更改它,它将在(Convert.ToBoolean(left)){var r=left%10;rev=rev*10+r;left=left/10;//lef
int x = 9876543;
char[] arr = x.ToString().ToCharArray();
Array.Reverse(arr);
Console.WriteLine(int.Parse(new string(arr)));
int reverseNum = 0, reminder, num;
        Console.WriteLine("Enter Number to Reverse:");
        int.TryParse(Console.ReadLine(), out num);
        bool isZero = false;
        int cnt=0;
        while (num > 0)
        {
            reminder = num % 10;
            reverseNum = (reverseNum * 10) + reminder;
            num = num / 10;
            if (reverseNum == 0)
                isZero = true;                
            cnt++;
        }
        if (isZero)
        {
            Console.WriteLine(reverseNum.ToString().PadLeft(cnt, '0'));
        }
        else
        {
            Console.WriteLine(reverseNum);
        }
        Console.ReadKey();
int sum = 0; int remainder = 0;
        int n = 123;
        for (int i = n; i > 0; i = i / 10)
        {
            remainder = i % 10;
            sum = (sum * 10) + remainder;
        }
Console.WriteLine(sum);
Console.ReadLine();
    public static void Main(string[] args)
    {
        int reversed = Reverse(-7360);
    }

    public static int Reverse(int number, int left = 0, int right = 0)
    {
        if (number == 0) return left + right;
        return Reverse(number / 10, left * 10 + right * 10, number % 10);
    }
    static void Main(string[] args)
    {
        Console.WriteLine("Please enter number");
        int number = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(ReverseLoop(number));
        Console.WriteLine(ReverseRecursive(number));
        Console.ReadLine();
    }

    public static int ReverseRecursive(int number)
    {
        int remainder = number % 10;
        number = number / 10;
        if (number < 1)
            return remainder;
        return ReverseRecursive(number) + remainder * Convert.ToInt32(Math.Pow(10, number.ToString().Length));
    }

    public static int ReverseLoop(int number)
    {
        int reversed = 0;
        while (number > 0)
        {
            reversed = reversed * 10 + (number % 10);
            number = number / 10;
        }
        return reversed;
    }
using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        int i = 234;
        int j = -123;
        Console.WriteLine(reverse(i));
        Console.WriteLine(reverse(j));
    }

    static int reverse(int i)
    {
        int sign = i / Math.Abs(i);
        var abs = string.Concat(Math.Abs(i).ToString().Reverse());
        return int.Parse(abs) * sign;
    }
}
    int number = -1234507;
    **number = number > 0 ? number : (number * -1);**

    int reverseNumber = 0;

    while(number > 0){
        reverseNumber = (reverseNumber * 10) +  (number % 10) ;
        number = number / 10;
    }
    Console.WriteLine(reverseNumber);
Convert.ToInt32(new string(num.ToString().Reverse().ToArray()));