举例说明。123456,我们要去掉右数第三个('4')。
练习中的想法是分别访问每个数字(即。6 5 4 3 2 1)。
C/C++/C#优先。
发布于 2008-10-15 06:32:28
更有效的实现可能是这样的:
char nthdigit(int x, int n)
{
while (n--) {
x /= 10;
}
return (x % 10) + '0';
}如果您只需要其中一个数字,则可以省去将所有数字转换为字符串格式的工作。而且,您不必为转换后的字符串分配空间。
如果需要考虑速度,您可以预先计算一个10次方的数组,并使用n来索引此数组:
char nthdigit(int x, int n)
{
static int powersof10[] = {1, 10, 100, 1000, ...};
return ((x / powersof10[n]) % 10) + '0';
}正如其他人所提到的,这是最接近基数10的逐位运算的方法。
发布于 2013-04-19 07:39:42
我只是根据这里的答案写了这篇文章,所以我想和大家分享一下。
这是基于Brannon的答案,但允许您一次获得一个以上的数字。在我的例子中,我使用它从保存在整数中的日期和时间中提取部分,其中的数字是yyyymmddhhnnssm_s格式。
public static int GetDigits(this int number, int highestDigit, int numDigits)
{
return (number / (int)Math.Pow(10, highestDigit - numDigits)) % (int)Math.Pow(10, numDigits);
}我把它做成了一个扩展,你可能不想这样做,但下面是示例用法:
int i = 20010607;
string year = i.GetDigits(8,4).ToString();
string month = i.GetDigits(4,2).ToString();
string day = i.GetDigits(2,2).ToString();结果:
年份= 2001
月份=6
天=7
发布于 2008-10-15 06:37:14
使用基数为10的数学:
class Program
{
static void Main(string[] args)
{
int x = 123456;
for (int i = 1; i <= 6; i++)
{
Console.WriteLine(GetDigit(x, i));
}
}
static int GetDigit(int number, int digit)
{
return (number / (int)Math.Pow(10, digit - 1)) % 10;
}
}产生:
6
5
4
3
2
1https://stackoverflow.com/questions/203854
复制相似问题