C#控制台应用开发:实现整数stratified数校验与累加值计算
C# Stratified数校验控制台程序(修复冗余输入+实现核心逻辑)
原代码问题
- 冗余读取3次用户输入(原代码连续调用3次
Console.ReadLine()),实际仅需1次输入待校验的目标整数 - 无输入合法性校验(未处理非数字、负数等无效输入)
- 未实现Stratified数的核心校验逻辑
Stratified数校验核心逻辑
- 候选数字d范围为1-9(d=0的累加和仅为0,无实际校验意义)
- 对每个d生成连位累加序列:d → dd(d10+d)→ ddd(d100+dd)… 逐项累加
- 累加过程中若和等于目标数,记录对应累加式;若和超过目标数,终止当前d的校验,切换下一个d
- 所有d遍历完毕无匹配时,判定目标数非Stratified数
完整修复代码
using System; using System.Text; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine("请输入要校验的整数:"); // 修复冗余输入:仅读取1次输入,添加合法性校验 string inputStr = Console.ReadLine().Trim(); if (!int.TryParse(inputStr, out int targetNum) || targetNum <= 0) { Console.WriteLine("输入无效,请输入大于0的正整数!"); return; } bool isStratified = false; StringBuilder exprBuilder = new StringBuilder(); // 遍历所有候选数字d(1-9) for (int d = 1; d <= 9; d++) { int currentSum = 0; int currentTerm = 0; exprBuilder.Clear(); // 生成连位项并累加 while (currentSum < targetNum) { // 生成下一个连位项:如d=3时,从3→33→333 currentTerm = currentTerm * 10 + d; currentSum += currentTerm; // 拼接累加表达式 if (exprBuilder.Length > 0) exprBuilder.Append(" + "); exprBuilder.Append(currentTerm); } // 校验是否匹配目标数 if (currentSum == targetNum) { isStratified = true; break; } } // 输出结果 if (isStratified) Console.WriteLine($"该数字是Stratified数,对应累加式:{targetNum} = {exprBuilder}"); else Console.WriteLine("该数字不是Stratified数"); } } }
测试验证
- 输入36 → 输出
36 = 3 + 33 - 输入861 → 输出
861 = 7 + 77 + 777 - 输入335 → 输出
该数字不是Stratified数
内容的提问来源于stack exchange,提问作者Hala Al-khaldy
相关产品推荐
相关产品推荐

