0
我想驗證C中的ISBN-10數字。我的邏輯是每個數字乘以它的基數,當總和時可以被11整除。但是,即使有效的ISBN號碼正在被拒絕。所以我添加了打印語句,我不明白爲什麼我得到這個輸出。任何人都可以將我指向正確的方向嗎?計算ISBN-10模數在C中不起作用
int isValid(long long int number){
int sum=0, i=0,j=10;
long long int base=10;
fflush(stdout);
printf("num=%ld\n",number);
while(i<10){
j=number%base;
sum += j*(i+1);
printf("n=%d i=%d sum=%d\n",j,i,sum);
base*=10;
i++;
}
return sum%11;
}
這裏是爲ISBN打印輸出 - 0321334876
num=321334876
n=8 i=0 sum=8
n=88 i=1 sum=184
n=788 i=2 sum=2548
n=3788 i=3 sum=17700
n=13788 i=4 sum=86640
n=413788 i=5 sum=2569368
n=6413788 i=6 sum=47465884
n=96413788 i=7 sum=818776188
n=696413788 i=8 sum=-1503434312
n=106479196 i=9 sum=-438642352
你需要乘以個別*數字*。在你的代碼中,最後一個數字'6'(正確)乘以%10,而前面乘以%100,導致「76」應該是倒數第二個「7」。 (相當混亂,你的示例輸出似乎報告了'88')。你也在某處溢出你的整數,但這只是由於數量太大。 – usr2564301 2014-10-16 22:14:56
Ref:[ISBN-10 check digits](http://en.wikipedia.org/wiki/International_Standard_Book_Number#ISBN-10_check_digits) – chux 2014-10-16 22:19:26
注:可疑代碼應該是'!(sum%11)'。 – chux 2014-10-16 22:21:40