2017-08-20 14 views
-1

forループのnの値を2に変更すると、間違いが発生します。私は0で割り切っていないことは確かです。私がする必要があるのは、カード番号の他の桁に2を掛けて合計に加算することです(ただし、この他の桁* 2が2桁の数字になる場合は、2桁の数字それは例えば、14 1 4)浮動小数点例外Cなぜ、それは何ですか?

long cardnumber = 378282246310005; 
int Luhn = 0; 
/*Luhn's algorithm*/ 
for(int n = 2; n <16; n = n + 2) 
{  
    /*check the digits that exceed 10*/ 
    if((((cardnumber % (10^n)) *2) > 10)) 
     Luhn += (cardnumber % (10^n)) + 1; 
    else 
     Luhn += (cardnumber % (10^n)) * 2; 



} 
printf("%d", Luhn); 
+3

JavaScriptの '^'演算子はビット単位のXORであり、 '10 ** n'も意味をなさない。これを簡単にするために、カード番号を文字列として保存する必要があります。 – Ryan

+2

実際に '10^10'は' 0'で、これは0で除算するエラーです。 –

+0

"もう一度コンパイルするまで推測してコーディングする方法を学ぶ"の被害者。 –

答えて

1

^はべき乗ではない、ビット単位のXOR演算子のためであるとなります。 n = 10の場合、式10^nは0と評価され、cardnumber % (10^n)はゼロ除算になります。

+3

チャックノリスだけがゼロで割ることができます! –

+0

またはヌルポインタを間接参照する –

関連する問題