C++70分求助!输出不了修改后带有X的ISBN码

P1055 [NOIP2008 普及组] ISBN 号码

Benerd @ 2024-01-18 20:53:56

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
    string ISBN;
    getline(cin, ISBN);
    int A[10];
    int j = 0;
    for (int i = 0; i < ISBN.size(); i++) {
        if ('0' <= ISBN[i] && ISBN[i] <= '9') {
            A[j] = ISBN[i] - '0';
            j++;
        }
    }
    int sum = 0;
    for (int m = 0; m < 9; m++) {
        sum += A[m] * (m + 1);
    }
    if (sum % 11 == A[9]) {
        cout << "Right";
    }
    else {
        if (sum % 11 == 10) {
            if (ISBN[ISBN.size() - 1] == 'X') {
                cout << "Right";
            }
        }
        else {
            if (sum % 11 != 10) {
                ISBN[ISBN.size() - 1] = sum % 11 + '0';
            }
            else {
                ISBN[ISBN.size() - 1] = 'X';
            }
            for (int n = 0; n < ISBN.size(); n++) {
                cout << ISBN[n];
            }

        }

        return 0;
    }
}

by FarmerDrone @ 2024-01-22 20:33:13

你是这么写的: if (sum % 11 == 10) ... else if(sum % 10 != 10) ... else ... 第三种情况永远不会出现,当然不对 改了一下:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
    string ISBN;
    getline(cin, ISBN);
    int A[10];
    int j = 0;
    for (int i = 0; i < ISBN.size(); i++) {
        if ('0' <= ISBN[i] && ISBN[i] <= '9') {
            A[j] = ISBN[i] - '0';
            j++;
        }
    }
    int sum = 0;
    for (int m = 0; m < 9; m++) {
        sum += A[m] * (m + 1);
    }
    if (sum % 11 == A[9]) {
        cout << "Right";
    }
    else {
        if (sum % 11 == 10) {
            if (ISBN[ISBN.size() - 1] == 'X') {
                cout << "Right";
            }
            else {
                ISBN[ISBN.size() - 1] = 'X';

            for (int n = 0; n < ISBN.size(); n++) {
                cout << ISBN[n];
            }
            }
        }
        else {
                ISBN[ISBN.size() - 1] = sum % 11 + '0';
            for (int n = 0; n < ISBN.size(); n++) {
                cout << ISBN[n];
            }

        }

        return 0;
    }
}

字符串直接cin就行了,不需要getline


|