从一个整数中获取第七位数字

7

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

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

var myDigit = 2345346792;

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

我如何从 myDigit 中获取第七个数字?我想避免将其转换为字符串并执行子字符串操作。我希望看到获取第七个数字的数学方法。

有人知道吗?


1
标识符不能以数字开头。 - Ondrej Tucny
9个回答

13
var seventh_digit = ( myDigit/1000000 ) % 10;

一个附加问题:如何将第五个和第六个数字作为一对进行检索? - codingjoe
var fifth_and_sixth = ( myDigit/10000 ) % 100; - Mohammad Jafar Mashhadi

11
int getSeventhDigit(int number)
{
    while(number >= 10000000)
        number /= 10;

    return number % 10;
}

这将获取7位数字以内的数的最后一位。

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


谢谢!这个很好用……我也解决了数学部分。我忘记了代码是从右到左读取的,所以实际上我需要的是从右边数第四位。 - codingjoe
一个小问题: 我怎样可以将第五和第六个数字提取成一对? - codingjoe
1
要获取第五位和第六位数字,请将while循环中的数字更改为1000000,并返回number%100。这将返回0到99之间的数字。 - David Yaw

6

不使用while循环的数学解决方案:

int myDigit = 2345346792;

var seventh = (myDigit / 1000000) % 10;

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

一个附加问题:我如何将第五个和第六个数字作为一对检索出来? - codingjoe
@codingjoe (myDigit / 10000) % 100 - Roast

5
更一般地,您可以从数字中创建一个(以零为基数的)数组:
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个数字。


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

不错,现在只需要将它写成 int 的扩展方法,就完美了 :-) - Timothy

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;

一个附加问题:我如何将第五个和第六个数字作为一对检索出来? - codingjoe

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

0
这可能看起来有些过时,但我想从一串数字中获取特定的数字,并且大多数解决方案(以及其他我找到的)都不够完善。所以...我决定采用一个变通方法,将数字转换为字符串,然后提取字符串的字符,再将它们转换回整数。我知道这并不是非常高效的,但对于小型项目,我不关心效率。
对于我的任务,我特别处理电话号码,所以这是我的代码:
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));

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接