从整数中获取第七位数字

我有一个10位数的整数。 我需要获得该整数的第7位数。

我找到了一个数学解法来获得整数的第一个数字。

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

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

任何人?

 int getSeventhDigit(int number) { while(number >= 10000000) number /= 10; return number % 10; } 

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

对于8位或更多位数字,它将除以10直到数字长度为7位,然后取最后一位数字。

 var seventh_digit = ( myDigit/1000000 ) % 10; 

没有while循环的数学解决方案:

 int myDigit = 2345346792; var seventh = (myDigit / 1000000) % 10; //result should be 5, your seventh digit from the right 

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

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

这应该对你想做的任何操作都有用。

假设“第零个数字”是最低有效数字,这应该是你:

  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 ; } 
 var nthDigit = (int)((number / Math.Pow(10, nth - 1)) % 10); 

其中nth是数字的nth n位数。

像这样的东西(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; 

这可能看起来已经过时,但我想从一串数字中获取特定的数字,而且大多数这些解决方案(以及我发现的其他解决方案)都缺乏。 所以…我决定了一个解决方法并将数字转换为字符串,然后拉出字符串的字符,将它们转换回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)); 

我希望这可以帮助任何寻找类似解决方案的人。

 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"); } }