如何编写C#类库方法实现输入数字的质因数提取返回功能?
问题分析
你现有代码的问题如下:
- 参数设计冗余:不需要将
b作为入参,该变量是分解过程中遍历用的除数,完全可以在方法内部声明,对外暴露无意义还会增加调用成本 - 循环终止条件错误:外层循环的终止条件为
a>0,实际上当a被除到1时就已经完成质因数分解,当前写法会进入无限循环 - 死循环问题:内部while循环匹配到整除条件后,没有对
a做除以b的操作,只要匹配到第一个因数就会一直卡在这里循环 - 结果拼接逻辑错误:每次匹配到因数时直接对
x赋值,会覆盖之前的所有结果;同时没有使用C#插值字符串的正确语法(需要在引号前加$),也没有添加多因数的分隔符,和你要求的返回所有质因数的需求完全不符 - 补充说明:你给出的示例「输入4返回2和4」是笔误,4的质因数分解是2×2,正确输出应为2、2。
修正后代码
如果你需要返回质因数列表,推荐直接返回List<int>类型,方便调用方二次处理;如果需要直接拿到格式化字符串,可以新增重载方法:
namespace PrimeFactorsLib { public class PrimeFactorsClass { // 返回质因数列表的核心方法 public List<int> PrimeFactors(int input) { List<int> factors = new List<int>(); // 处理小于2的非法输入 if (input < 2) return factors; // 从最小的质数2开始遍历除 for (int divisor = 2; divisor <= input; divisor++) { // 能整除就一直除,把所有相同的质因数都存入结果 while (input % divisor == 0) { factors.Add(divisor); input /= divisor; } } return factors; } // 直接返回格式化字符串的重载方法 public string GetPrimeFactorsString(int input) { var factors = PrimeFactors(input); return string.Join("、", factors); } } }
控制台调用示例
using PrimeFactorsLib; class Program { static void Main(string[] args) { PrimeFactorsClass calculator = new PrimeFactorsClass(); Console.WriteLine(calculator.GetPrimeFactorsString(4)); // 输出 2、2 Console.WriteLine(calculator.GetPrimeFactorsString(50)); // 输出 2、5、5 } }
内容的提问来源于stack exchange,提问作者KickDrumPilot
相关产品推荐
相关产品推荐

