7

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

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

var myDigit = 2345346792;

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

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

任何人?

4

9 回答 9

13
var seventh_digit = ( myDigit/1000000 ) % 10;
于 2012-12-06T21:21:55.980 回答
11
int getSeventhDigit(int number)
{
    while(number >= 10000000)
        number /= 10;

    return number % 10;
}

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

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

于 2012-12-06T21:20:50.613 回答
6

没有 while 循环的数学解:

int myDigit = 2345346792;

var seventh = (myDigit / 1000000) % 10;

//result should be 5, your seventh digit from the right
于 2012-12-06T22:28:27.137 回答
5

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

uint myDigit = 2345346792;

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

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

于 2012-12-09T00:16:11.907 回答
5
var nthDigit = (int)((number / Math.Pow(10, nth - 1)) % 10);

nth数字的第 n 位数在哪里。

于 2017-03-01T15:19:11.820 回答
3

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

    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 ;
    }
于 2012-12-06T21:27:33.497 回答
2

像这样的东西(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;
于 2012-12-06T21:21:09.163 回答
0

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

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

于 2017-05-30T21:50:16.107 回答
0
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");
    }
}
于 2018-08-13T23:03:31.060 回答