【问题标题】:Get the seventh digit from an integer从整数中获取第七位
【发布时间】:2012-12-06 21:16:28
【问题描述】:

我有一个 10 位的整数。我需要得到那个整数的第 7 位。

我找到了一个数学解决方案来获取整数的第一位。

var myDigit = 2345346792;

var firstDigit = Math.Abs(myDigit);
while (firstDigit >= 10)
{
     firstDigit /= 10;
}

如何从 myDigit 中获取第七位数字?我试图避免转换为字符串并执行子字符串。我想看看获得第七位数字的数学版本。

有人吗?

【问题讨论】:

  • 标识符不能以数字开头。

标签: c# .net algorithm math


【解决方案1】:
var seventh_digit = ( myDigit/1000000 ) % 10;

【讨论】:

  • 附带问题:如何将第 5 个和第 6 个数字成对检索?
  • var fifth_and_sixth = ( myDigit/10000 ) % 100;
【解决方案2】:
int getSeventhDigit(int number)
{
    while(number >= 10000000)
        number /= 10;

    return number % 10;
}

这将采用 7 位或更少位数的数字的最后一位。

对于 8 位或以上的数字,它会除以 10,直到数字长到 7 位,然后取最后一位。

【讨论】:

  • 谢谢!这很好用……我想出了数学部分。我忘记了代码是从右到左读取的,所以它实际上是我需要的右数第四位。
  • 附带问题:如何将第 5 个和第 6 个数字成对检索?
  • 要获取第 5 和第 6 位,将 while 循环中的数字更改为 1000000,并返回 number % 100。这将返回一个从 0 到 99 的数字。
【解决方案3】:

没有while循环的数学解:

int myDigit = 2345346792;

var seventh = (myDigit / 1000000) % 10;

//result should be 5, your seventh digit from the right

【讨论】:

  • 附带问题:如何将第 5 个和第 6 个数字成对检索?
  • @codingjoe (myDigit / 10000) % 100
【解决方案4】:

更一般地说,您可以从数字创建一个(从零开始的)数组:

uint myDigit = 2345346792;

int[] digits = new int[10];
for (int i = 9; i >= 0; i--)
{
    digits[i] = (int)(myDigit % 10);
    myDigit /= 10;
}

这对于您希望进行的任何操作都应该很有用。

【讨论】:

    【解决方案5】:
    var nthDigit = (int)((number / Math.Pow(10, nth - 1)) % 10);
    

    nth 是数字的第 n 位。

    【讨论】:

      【解决方案6】:

      假设“第零位”是最低有效位,你应该这样做:

          public static int nthDigit( int value , int n )
          {
              if ( n < 0 ) throw new ArgumentException();
              if ( value < 0 ) throw new ArgumentException() ;
      
              while ( n-- > 0 )
              {
                  value /= 10 ;
              }
      
              int digit = value % 10 ;
              return digit ;
          }
      

      【讨论】:

      • 很好,现在只需将其写为 int 的扩展方法,它是完美的 :-)
      【解决方案7】:

      类似这样的东西(C 代码,但应该很容易移植):

      if (n < 1000000)
        return 0;        // no 7th digit
      while (n > 9999999)
        n /= 10;         // now in the range [1,000,000..9,999,999]
      return n % 10;
      

      【讨论】:

      • 附带问题:如何将第 5 个和第 6 个数字成对检索?
      【解决方案8】:

      这可能看起来已经过时了,但我想从一串数字中获取特定的数字,而大多数这些解决方案(以及我发现的其他解决方案)都缺乏。所以...我决定了一个解决方法并将数字转换为字符串,然后提取字符串的字符,将它们转换回 int。我知道这不是很有效,但对于小型项目我并不关心效率。

      对于我的任务,我专门处理电话号码,所以这是我的代码:

      long number = 5559876543;
      string s = "" + number;
      
      int areaCode = int.Parse(s.Substring(0, 3));
      int prefix = int.Parse(s.Substring(3, 3));
      int suffix = int.Parse(s.Substring(6, 4));
      

      我希望这对寻找类似解决方案的人有所帮助。

      【讨论】:

        【解决方案9】:
        public static int GetNthDigit(this int value, int digits)
        {
            double mult = Math.Pow(10.0, digits);
        
            if (value >= mult)
            {
                while(value >= mult)
                    value /= 10;
        
                return value % 10;
            }
        
            else
            {
                throw new ArgumentOutOfRangeException("Digits greater than value");
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-20
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          • 2018-07-20
          • 1970-01-01
          • 2016-12-15
          • 2019-12-29
          相关资源
          最近更新 更多