题解 | #[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")