Luhn Algorithm in C++ How can I improve or shorten my implementation of the Luhn algorithm?

    int digits;
    cout &lt;&lt; "enter the numer of digits" &lt;&lt; endl;
    cin &gt;&gt; digits;
    int Acc_num[digits];
    int shuma = 0;


The shuma variable is the sum.

I created an array to store the digits from the string credit_card.

And asked the user how many digits his credit card has, etc. (the digits int).     

    string credit_card;
    cout &lt;&lt; "enter the identification number" &lt;&lt; endl;
    cin &gt;&gt; credit_card;

    // store the digits
    for (int i = 0 ; i &lt; digits ; i ++ ) {
        Acc_num[i] = credit_card[i];
    }

    for (int i = 0 ; i &lt;= (digits - 1) ; i ++ ) {
        Acc_num[i] -= 48;
    }

    // Double every other
    for (int i = 1 ; i &lt;=digits ; i ++) {
        if (i % 2 == 0) {
            Acc_num[i-1] =  2 * Acc_num[i-1];
        } else {
            Acc_num[i-1] = Acc_num [i-1];
        }
    }

    //Sum digits
    for (int i = 1 ; i &lt;= digits ; i ++ ) {
        if (Acc_num[i-1] &gt; 9 &amp;&amp; i % 2 == 0) {
            int mod = Acc_num[i-1] % 10 ;
            Acc_num[i-1]  =  1 + mod ;
        } else {
        Acc_num[i-1] = Acc_num[i-1];
        }
    }

    // the sum
    for (int i = 0 ; i &lt;= (digits - 1) ; i ++ ) {
        shuma += Acc_num[i];
    }

    if (shuma % 10 == 0) {
        cout &lt;&lt; "\nthis number is valid" &lt;&lt; endl;
    } else {
        cout &lt;&lt; "\nthis number is invalid" &lt;&lt; endl;
    }
Doubling the even digits and subtracting 9 if > 10 would be mod 9 so a really simple, compact algorithm might be:

for (int i = 0; i &lt; nDigits; i++)
{
    int   digit = digitArray [i] - '0';   // Char to number
    if  (i &amp; 1)  // Digit 1, 3, 5 not 0, 2, 4 - "even digits" starting at 1
        if  ((digit &lt;&lt;= 1) &gt;= 10) //  Double it, check &gt;= 10
            digit -= 9;           //  Same as summing the digits
    shuma += digit;
}
int checksum = shuma % 10;