【发布时间】:2023-03-03 08:41:26
【问题描述】:
我知道如何以传统的数字方式生成所有n位数字,
for(long long number = pow(10, n-1); number < pow(10, n); number++) {
cout << number << endl;
}
例如,
for n = 5, it will generate 10000 to 99999;
但是,由于我必须计算每个数字的数字,所以首先以数字数组格式构造数字会很方便。
例如,以下代码以数组方式生成所有 5 位数字:
for(int i = 1; i < 9; i++)
for(int j = 0; j < 9; j++)
for(int k = 0; k < 9; k++)
for(int l = 0; l < 9; l++)
for(int m = 0; m < 9; m++) {
//executed 9 * 10^4 = 90000 times
//construct my array instance with i, j, k, l, m
cout << i << j << k << l << m << endl;
}
现在的问题是:n 是未知的。 (例如,它可以是 2、3、4、5、6...、10) 那么如何根据数字 n 生成 n 位数组呢?
例如,我想要一段如下代码(任何比这个更好的方法都非常感谢):
for(int x = 0; x < n; x++) {
//each x is a layer of the loop ?!
.....
}
【问题讨论】:
-
我建议只存储数字数组而不是存储所有数字的每个数字。当您要处理特定数字时,只需使用这样的语句:
while(n) { printf("%d", n % 10); n /= 10;} -
@prehistoricpenguin 为什么?将每个数字上的语句转换为数字数组会比类似排列的解决方案更快吗?
-
为了更少的内存消耗,如果只遍历一次数组,没有效率问题。
-
@prehistoricpenguin 我做了一个实验,并在 Trevor 的帖子中写了评论。