求助!!!

P1055 [NOIP2008 普及组] ISBN 号码

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

  1. 您的a[12]=mod[sum%11]没有强转,导致最后一位输出的是ASCII

  2. 注意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码


|