编写一个C++程序,根据Luhn算法查找并列出所有可能的正确信用卡号



我需要根据Luhn算法打印所有可能的正确信用卡号,我确实喜欢嵌套在一起的16个for循环,我想知道是否有办法缩短我的代码?这是我的代码:

这是索引0,2,4,6,8,10,12,14,16。它取这个数字并乘以2。然后取各个数字的和;假设索引0为6,则取6*2=12,求和1+2

int dbl(int x) {
int sum = 0;
while (x !=0)
{
sum += x % 10;
x /= 10;
}
return sum;
}
void bruh(int x, int y) {

x += (dbl(2 * y));
}

这是我的循环:

int main()
{
for (int i = 0; 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++)
{
for (int n = 0; n <= 9; n++)
{
for (int o = 0; o <= 9; o++)
{
for (int p = 0; p <= 9; p++)
{
for (int q = 0; q <= 9; q++)
{
for (int r = 0; r <=9; r++)
{
for (int s = 0; s <= 9; s++)
{
for (int u = 0; u <= 9; u++)
{
for (int v = 0; v <= 9; v++)
{
for (int x = 0; x <= 9; x++)
{
for (int w = 0; w <= 9; w++)
{
for (int y = 0; y <= 9; y++)
{
int dbles = 0, sngls =0;
bruh(dbles, i);
sngls += j;
bruh(dbles, k);
sngls += l;
bruh(dbles, m);
sngls += n;
bruh(dbles, o);
sngls += p;
bruh(dbles, q);
sngls += r;
bruh(dbles, s);
sngls += u;
bruh(dbles, v);
sngls += x;
bruh(dbles, w);
sngls += y;
if (dbles+sngls%10==0)
{
  cout << "Valid Number: " << i << j << k << l << m << n << o << p << q << r << s << u << v << x << w << y << endl;
  cout << "---------------" << endl;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return 0;
}

该程序运行良好(添加了一个break语句,在第100次cc后停止,以检查它是否运行,并且它是剂量(,我只想知道是否还有办法缩短我的代码

像这样的东西会更短更容易阅读:

#include <string>
void increment(std::string& s) {
for (int i = s.length() - 1; i >= 0; --i) {
if (s[i] != '9') {
s[i]++;
return;
}
s[i] = '0';
}
}
int main()
{
std::string s = "0000000000000000";
for (uint64_t i = 0; i < 1'000'000'000'000'000; ++i) {
// do your check with s[0]..s[15]
increment(s);
}
}

注意:这几乎完成了您在代码中尝试做的事情。

您可以接受n0rd的建议,循环使用15位数字,计算校验和并将其附加到末尾。在这种情况下,你只需要3000年,而不是30000年:(

相关内容

最新更新