从整数中获取第七位数字
我有一个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"); } }