You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助解决C#计算输入数字约数的循环问题

问题分析与修复方案

原代码的核心问题

  • y 仅在初始化时计算了一次,后续循环中未更新值,导致内部 while(y==0) 陷入无限循环(因为任何数对1取余结果都是0)
  • 循环逻辑错误:初始x=1,进入while(x<input)后先执行x++,直接跳过了1这个约数;同时循环条件x<input会漏掉输入数字本身这个约数
  • 输出格式不符合要求,每个约数单独换行,而非需求中的逗号分隔字符串

修正后的代码

namespace Divisions
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter number:");
            // 增加输入合法性判断,避免非数字输入导致程序崩溃
            if (int.TryParse(Console.ReadLine(), out int input) && input > 0)
            {
                var divisors = new List<int>();
                // 遍历1到输入数字的所有整数,逐一判断是否为约数
                for (int x = 1; x <= input; x++)
                {
                    if (input % x == 0)
                    {
                        divisors.Add(x);
                    }
                }
                // 将约数列表格式化为逗号分隔的字符串输出
                Console.WriteLine(string.Join(", ", divisors));
            }
            else
            {
                Console.WriteLine("请输入有效的正整数");
            }
        }
    }
}

关键优化说明

  • 用int.TryParse替代Convert.ToInt32,处理用户输入非数字的情况,提升程序健壮性
  • 使用for循环遍历1到输入数字的所有整数,确保不会遗漏1和输入数字本身这两个必有的约数
  • 用List<int>收集所有约数,最后通过string.Join统一输出格式,完全匹配需求中的逗号分隔样式
  • 增加正整数校验,避免处理0或负数的无效情况

内容的提问来源于stack exchange,提问作者Doston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:35:21