软骨头鱼 @ 2022-03-22 23:44:18
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[13];
for(int i=0;i<13;i++){
cin>>a[i];
}
int h=0,sum=0;
for(int j=0;j<12;j++){
if(a[j]!='-'){
h++;
sum+=h*(a[j]-'0');
}
}
int sign=sum%11;
if(sign==(a[12]-48)){
cout<<"Right";
}
else if(sign==10){
a[12]='X';
for(int i=0;i<13;i++){
cout<<a[i];
}
}
else{
a[12]=sign+48;
for(int i=0;i<13;i++){
cout<<a[i];
}
}
return 0;
}
求助,有两个数据点错误
by Jasper08 @ 2022-03-22 23:47:34
@软骨头鱼
//P1055 ISBN 号码
#include <iostream>
using namespace std;
int main()
{
int cnt = 0, ans = 0;
char num[15];
for (int i = 0; i < 12; ++i)
{
cin >> num[i];
if ('0' <= num[i] && num[i] <= '9') //输入 9个数字
{
cnt += 1;
ans += cnt * (num[i] - '0');
}
}
char tisbn; //转换最后一位验证码
cin >> tisbn;
int isbn;
if ('0' <= tisbn && tisbn <= '9')
isbn = tisbn - '0';
else //此时验证码为 X,即 10
isbn = 10;
if (ans % 11 == isbn)
cout << "Right";
else
{
for (int i = 0; i < 12; ++i)
cout << num[i];
if (ans % 11 == 10)
cout << "X";
else
cout << ans % 11;
}
}
by mengtian_ @ 2022-03-23 08:12:18
其实我也是蒟蒻 \
根据你的代码改的,注释在代码里有,就是sign=10的时候判断有问题。
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[13];
for(int i=0;i<13;i++){
cin>>a[i];
}
int h=0,sum=0;
for(int j=0;j<12;j++){
if(a[j]!='-'){
h++;
sum+=h*(a[j]-'0');
}
}
int sign=sum%11;
if(sign==(a[12]-48)){//如果sign=10的话,a[12]-48应该不对了
cout<<"Right";
}
else if((sign==10&&a[12]=='X')){//所以要再加一条判断10是否等于X
cout<<"Right";
}
else if(sign==10){
a[12]='X';
for(int i=0;i<13;i++){
cout<<a[i];
}
}
else{
a[12]=sign+48;
for(int i=0;i<13;i++){
cout<<a[i];
}
}
return 0;
}