【问题标题】:c sharp finding a specific digit in an int [duplicate]c在int中查找特定数字[重复]
【发布时间】:2018-03-14 12:14:43
【问题描述】:

我正在尝试查找整数(从右到左)第n位。我是编程新手,但一直在使用这个网站作为参考 - 直到现在我一直拒绝传递我的问题,但我至少无法理解这个问题,即使经过数小时的努力。

这是我到目前为止的代码,但是对于 FindDigit(int 5673, int 4) 它给出的是 53 而不是 5,FindDigit(int 5673, int 3) 给出 51 而不是 6

public class DigitFinder
{
    public static int FindDigit(int num, int nth)
    {
        num = Math.Abs(num);
        string answer = Convert.ToString(num);
        int i = answer.Length;

        return ans[i-nth];
    }
}

我完全不明白为什么它返回一个 2 位数字。任何指导都非常感谢!

【问题讨论】:

  • 您需要将其转换回 int。它为您提供 ascii 值
  • 您正在返回数字的字符代码。
  • 不要通过字符串/字符。使用 / 和 % : int dig = (num / (int)Math.Pow(10,nth)) % 10
  • 旁注:带有参数numnth 的方法FindDigit 如果实际上从右到左返回第n 个数字,则根本没有意义。如果有人想使用你的方法,他会认为它是错误的。名字很重要!
  • 哎呀,实际上我上面的评论是错误的。更正:int dig = (num / (int)Math.Pow(10,nth-1)) % 10;

标签: c#


【解决方案1】:

我只是用

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, Remainder =] 2。

请注意,我还会检查 nth 是否 > 0 和 num >= 10 ^ (nth-1)。 (永远不要相信用户输入)

【讨论】:

  • 非常聪明!非常感谢 Fildor
【解决方案2】:

53 是 字符 5 的 ASCII 码。只需减去字符0,即数字48。

但是,通常最好避免对此类事情进行字符串操作; 如果可能你应该更喜欢除法/余数(模)算术。

【讨论】:

  • 非常感谢您的快速回复!真的很感激!我觉得字符串操作是一个丑陋的解决方案,但我想不出更好的办法。你是对的,我认为 % 会更干净。再次感谢
【解决方案3】:

只是因为没有其他人这样做,也因为我有可打印字符强迫症

public static int GetLeastSignificantDigit(int number, int digit)
{
    for (var i = 0; i < digit - 1; i++)
        number /= 10;
    return number % 10;
}

Demo here

【讨论】:

    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2017-09-25
    • 1970-01-01
    • 2020-06-24
    • 2018-11-22
    相关资源
    最近更新 更多