C++递归生成n位严格递增数字的代码问题及解决方案
生成n位严格递增数字代码问题排查
需求说明
需要生成满足严格递增规则的n位数字。
示例输出
8位严格递增数字的输出结果如下:
12345678 12345679 12345689 12345789 12346789 12356789 12456789 13456789 23456789
遇到的问题
通过递归方法实现需求时,未得到预期输出:将n设置为3时,最终输出的是6位数字,且不满足严格递增的要求。
实际运行输出截图

原有代码
#include <iostream> #include <string> #include <vector> #include <string_view> #include <cmath> using namespace std; class Solution { public: void gen_num(int prev, string ans, int n, int ind){ if (n==ind){ cout<<ans<<" "; return; } for (int i=1+prev; i<=9; i++){ gen_num(i, ans+to_string(i+'0'), n, ind+1); } } }; int main() { Solution sol; int n=3; sol.gen_num(0,"", n, 0); }
问题排查结果
已定位到错误点:代码中ans+to_string(i+'0')的写法错误,正确写法应为ans+to_string(i)。
错误原因说明
i + '0'的作用是将数字i转换为对应的ASCII字符值,例如当i=1时,1 + '0'的计算结果是49,也就是ASCII码中字符'1'对应的编码数值。此时调用to_string()方法,会将数字49直接转换为字符串"49",相当于每拼接一位数字就多写入了2个字符,所以当n=3时,最终生成的字符串长度是6位,自然不符合输出要求。
直接使用to_string(i)会直接将数字i转换为对应的字符串,例如i=1时得到的是"1",符合拼接逻辑,修改后即可正常输出符合要求的结果。
内容的提问来源于stack exchange,提问作者Pygirl
相关产品推荐
相关产品推荐

