首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算在C中不工作的ISBN-10模数

计算在C中不工作的ISBN-10模数
EN

Stack Overflow用户
提问于 2014-10-16 21:58:15
回答 1查看 993关注 0票数 0

我试图在C中验证ISBN-10数字,我的逻辑是,每一个数字乘以它的基数,当求和后,可以被11整除。但是,即使是有效的ISBN数字也得到了rejected.So,我添加了打印语句,我不明白为什么要得到这个输出。谁能给我指明正确的方向?

代码语言:javascript
复制
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的打印输出

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-16 22:31:53

  1. 您的计算方法是错误的;例如,参见维基百科以获得适当的示例。
  2. 不需要使用非常大的变量,使用字符串作为输入是相当容易的。
  3. 您可以对9位数进行求和,并检查最后一个数字是否是预期的数字,或者检查所有10位数,并查看结果是否为0。下面的程序两者兼而有之;解析九位数字ISBN返回预期的检查数字(其中10的值应解释为传统的X)。
  4. 对于一个10位的ISBN,我的程序返回剩余部分,因此0实际上是“有效”的指示符。
代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int isValid (char *isbn)
{
    int sum=0, i=0, j, pos=0;
    printf("num=%s\n", isbn);

    while (isbn[pos])
    {
        if (i == 9 && tolower(isbn[pos]) == 'x')
        {
            i++;
            sum += 10*i;
            printf("n=%d i=%d sum=%d\n",j,i,sum);
        } else
        if (isdigit (isbn[pos]))
        {
            i++;
            j = isbn[pos]-'0';
            sum += j*i;
            printf("n=%d i=%d sum=%d\n",j,i,sum);
        }
        pos++;
    }
    if (i == 9 || i == 10)
        return sum % 11;
    return -1;
}

int main (int argc, char **argv)
{
    if (argc != 2)
    {
        printf ("usage: isbn [isbn number]\n");
        return -1;
    }
    printf ("checksum: %d\n", isValid (argv[1]));
    return 0;
}

示例输入和输出(省略调试字符串):

代码语言:javascript
复制
> ./isbn 032133487
checksum: 6

> ./isbn 0321334876
checksum: 0

> ./isbn 1-84356-028-3
checksum: 0

> ./isbn 0-8044-2957-X
checksum: 0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26414616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档