问题标题: 酷町堂:50酷町豆跪求解答!!!

0
0
已解决
张元宝
张元宝
修练者
修练者

试题描述

ISBN(国际标准图书编号)是由十个阿拉伯数字组成的编码,用来唯一地标识一本书。前九个阿拉伯数字描述这本书的一些信息,最后一个数字用来验证ISBN码是否正确。要验证ISBN码的正确性,你要把第一个数字乘以十,你要把第二个数字乘以九,你要把第三个数字乘以八……直到最后一个数字乘上一,再把这些积累加起来。如果所得的和可以被11整除的话,那么这就是一个合法的ISBN码。

比如说 0201103311 是一个合法的ISBN,因为

10*0+9*2+8*0+7*1+6*1+5*0+4*3+3*3+2*1+1*1=55

前九个数字都在0到9之间。有时候,最后一个数字需要取到10,那么我们就把最后一个数字写成大写X。比如156881111X也是一个合法的ISBN码。

你的任务就是在给你丢失了一个数字的ISBN码之后,确定那个丢失的数字。丢失数字的地方用?表示。

输入要求

一个十个数字组成的ISBN码,其中包含用?表示的一个丢失的数字。

输出要求

    总共1行:就是那个丢失的数码(0..9或大写X)。如果标有的?的位置上没有数字可以使之成为一个合法的ISBN码的话,就输出-1。

输入样例

1568?1111X

输出样例

8

# include <iostream>
# include <cstdlib>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <cmath>
# include <iomanip>
# include <string>
using namespace std;

int main()
{
    int k=0,f,h=10,s=0;
    string a;
    cin>>a;
    for(int i=0;i<a.length();i++){
        if(a[i]>='0'&&a[i]<='9') {
            k+=(a[i]-'0')*h;
            h--;
        }
        else if(a[i]=='X'){
            k+=10;
        }
        else{
            f=h;
            h--; 
        }
    }
    for(int i=1;i<=9;i++){
        if((k+i*f)%11==0){
            cout<<i;
            return 0;
        }
    }
    cout<<"-1";
    return 0;
}

做出来再次加码!


0
0
0
0
我要回答