我试图找到整数(从右到左)的第n位 。我是编程新手,但我一直在使用这个网站作为参考 - 直到现在我还是拒绝传递我的问题,但即使经过几个小时的努力,我也至少无法理解这一点。
这是我到目前为止的代码,但对于 FindDigit(int 5673,int 4),它提供 53 而不是5, FindDigit(int 5673, int 3)给出 51 而不是6
using System;
public class digitFinder
{
public static int FindDigit(int num, int nth)
{
num = Math.Abs(num);
string ans = Convert.ToString(num);
int i = ans.Length;
return ans[i-nth];
}
}
我根本无法理解为什么它返回一个2位数字。任何指导都赞赏!
答案 0 :(得分:3)
53是字符 5
的ASCII码。只需减去字符0
,即数字48。
然而,通常通常是一个好主意,以避免对这样的事情进行字符串操作; 如果可能的话你应该更喜欢除法/余数(模数)算术。
答案 1 :(得分:3)
我只是用
int result = (num / (int)Math.Pow(10,nth-1)) % 10;
其中num
是从(从右到左计算)第n个数字的数字,而nth
是您想要的数字的“索引”(再次:从右到左计算)。请注意,它是基于1的。那是“1”是最右边的数字。 “0”将超出范围。
解释数学:
(int)Math.Pow(10,nth-1)
获取你想要的索引并将其减少1,然后将其作为10的幂。因此,如果你想要第3个数字,那么得到10的2的幂等于100。
顺便说一句:转换为int是必要的,因为Math.Pow在double上工作并返回double。但我们希望继续使用整数运算。
除以上述等式的结果将您的数字“移动”到右侧,因此您想要的数字成为最右边的数字。例如:1234,我们想要右边的第三个数字(“2”)=> 1234 /(10 ^(3-1))= 1234/100 = 12
然后通过将“余数”(模数)运算符应用于除数10来“切除”最右边的数字。示例:12%10 = [12/10 = 1,剩余=] 2.
请注意,我也会检查nth
是否为> 0和num
> = 10 ^(nth-1)。 (绝不相信用户输入)
答案 2 :(得分:2)
仅仅因为没有其他人这样做,也因为我有可打印字符OCD
public static int GetLeastSignificantDigit(int number, int digit)
{
for (var i = 0; i < digit - 1; i++)
number /= 10;
return number % 10;
}