Tarshine @ 2023-03-26 15:53:03
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[14],mod[12]="0123456789X";
for(int i=0;i<14;i++)
{cin>>a[i];}
int i,j=1,sum=0;
for(i=0;i<12;i++)
{if(a[i]=='-') continue;
sum+=(a[i]-'0')*j++;}
if(mod[sum%11]==a[12]) cout<<"Right";
else {a[12]=mod[sum%11];
cout<<a[14];}
return 0;
}
by Indufty_666 @ 2023-03-26 16:34:51
@Tu15879030589
您的a[12]=mod[sum%11]
没有强转,导致最后一位输出的是ASCII
码
注意10是X
,需要特判。
代码自己先想想。
by Indufty_666 @ 2023-03-26 16:44:43
#include <bits/stdc++.h>
using namespace std;
int main()
{
string isbn,mod_11 = "0123456789X";
cin >> isbn;
int x = 0;
long long mul = 0;
for(int i = 0;i < 12;i++)
{
if(isbn[i] == '-') continue;
else
{
x++;
mul = mul + int(isbn[i] - '0') * x; //强转
}
}
if(mod_11[mul % 11] == isbn[12]) cout << "Right" << endl;
else
{
int x = mul % 11;
if(x == 10)
{
isbn[12] = 'X';
}//特判
else
{
isbn[12] = char(x + '0');
}//转回去
cout << isbn << endl;
}
return 0;
}
by Tarshine @ 2023-03-27 14:05:08
@Liumingxuan2010 还是只有30分
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[14],mod[12]="0123456789X";
for(int i=0;i<14;i++)
{cin>>a[i];}
int i,j=1,sum=0;
for(i=0;i<12;i++)
{if(a[i]=='-') continue;
sum+=(a[i]-'0')*j++;}
if(mod[sum%11]==a[12]) cout<<"Right";
else {int x=sum%11;
if(x==10) {a[14]='X';}
else {a[14]=mod[sum%11];}
cout<<a[14];}
return 0;
}
by Indufty_666 @ 2023-03-27 21:25:17
@Tu15879030589
如果答案不是Right
,则需输出整个正确地ISBN码