题解 | #[NOIP2008]ISBN号码#

[NOIP2008]ISBN号码

https://www.nowcoder.com/practice/95712f695f27434b9703394c98b78ee5

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char a;
    string b="";
    int n=1,sum=0,num=0;
    while (cin>>a) {
        if (a>='0'&&a<='9'&&n<=9) {
            sum +=int(a-'0')*n;
            n++;//对前面9位数字对应的值进行计算
        }
        num++;//这里的num代表取到isbn的对应第几位
        b+=a;//用+号将输入的字符拼接起来
        if(num==13)//注意进入判断或输出的条件,是在a为最后一个数字时候
        {
            sum = sum %11; //对前面的计算结果对11取mod
            
            //第一种成立的情况
            if (int(a-'0')==sum) {
                cout<<"Right";
            }
            //取余为10成立的特殊情况
            else if (sum==10&&a=='X') {
                cout<<"Right";
            }

            //错误情况并修改为正确输出
            else {
                string new_s="";
                new_s = b.substr(0,12);//取出b的前12的字串
                if(sum!=10)//不是特殊情况则正常加运算结果
                {
                    new_s += char(sum+'0');
                }
                else //是特殊情况则在最后加X 
                {
                    new_s +="X";
                }
             
                cout<<new_s;
            }
        }
    }
    
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务