【问题标题】:Digit sum in for loop C#for循环C#中的数字总和
【发布时间】:2023-03-03 16:58:01
【问题描述】:

我写了我的方法,假设从用户那里收到一个数字,然后检查从 0 到 1000 的数字。然后它应该返回所有数字总和等于收到数字的数字。
因此,如果我输入 6,它应该返回 6、42、51、33、123 等数字。
非常感谢帮助,因为我已经对此进行了一段时间的研究。

public static double number() {
    Console.WriteLine("Enter your number! ");
    string enter = Console.ReadLine();
    double x = Convert.ToDouble(enter);        
    for (int i = 0; i < 1000; i++ ) {
        double r;
        double sum = 0;
        while (i != 0) {
            r = i % 10;
            i = i / 10;
            sum = sum + r;
        }
        if (sum == x) {
            Console.WriteLine(i + " ");
        }
    }
    return(0);
}

我知道“return(0)”存在问题,但我不完全确定应该返回什么。

【问题讨论】:

    标签: c# loops for-loop sum digit


    【解决方案1】:

    我建议尝试做这样的事情:

    public static IEnumerable<int> number()
    {
        Console.WriteLine("Enter your number!");
        string enter = Console.ReadLine();
        int digitSum = int.Parse(enter);
        foreach (var n in Enumerable.Range(0, 1000))
        {
            if (n.ToString().ToCharArray().Sum(c => c - '0') == digitSum)
            {
                yield return n;
            }
        }
    }
    

    当我运行它并输入 6 时,我会得到这个结果:

    【讨论】:

    • 谢谢,这很有帮助...我最终将您的一些建议应用到我自己的方法中,结果非常好。谢谢!:)
    【解决方案2】:

    您快到了:唯一剩下的问题是您正在修改嵌套的 while 循环内的循环计数器 i,这会改变外循环的工作方式。

    您可以通过将i 的副本保存在另一个变量(例如ii)中并在while 循环中修改它来解决此问题:

    double r;
    double sum = 0;
    int ii = i;
    while (ii != 0) {
        r = iCopy % 10;
        ii /= 10;
        sum = sum + r;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多