我需要根據 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 后停止以檢查它是否運行,并且它劑量),我只想知道是否有辦法讓我的代碼更短
uj5u.com熱心網友回復:
像這樣的東西會更短更容易閱讀:
#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 位數字,計算校驗和并將其附加到末尾。在那種情況下,您只需要 3,000 年而不是 30,000 年 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/404988.html
標籤:
上一篇:手風琴ForLoopJS選擇器
