// ルーンチェックサム(ISBNコード:識別番号の算出)
#include <iostream>
using namespace std;
// 入力した数字の桁数を調べる
unsigned GetDigit(int64_t number) {
     unsigned digit = 0;
        while (number /= 10) {    
            ++digit;
        }
        return digit;
}
// 識別番号の算出
void checkSumValue()
{
    char digitChar;                     // 入力した数字
    int oddLengthChecksum = 0;          // 奇数桁の数値を合計した値
    int evenLengthChecksum = 0;         // 偶数桁の数値を合計した値
    int position = 1;                   // 何桁目かを示す変数
    int checksum = 0;                   // 奇数桁の合計 + 偶数桁の合計*3
    int checkDigit = 0;                 // チェックディジット
    digitChar = cin.get();
    do {
        if (position % 2 != 0) {   
            oddLengthChecksum += digitChar - '0';
        } else {
            evenLengthChecksum += digitChar - '0';
        }
        digitChar = cin.get();
        position++; 
        } while(digitChar != 10);
    checksum = oddLengthChecksum + evenLengthChecksum * 3;
        if (checksum % 10 != 0) {
           checkDigit = 10 - checksum % 10;
        } else {
           checkDigit = checksum % 10;
        }
    cout << "計算結果は " << checksum << "です。\n";
    cout << "識別番号は " << checkDigit << "です。 \n";
}
// 入力した数字(char)を整数値(int64_t)に変換
void changeDigitChar()
{
    char digitChar;
    while (digitChar != 10) {
        cin >> digitChar;
        int64_t number = (digitChar - '0');
        while (digitChar != 10) {
            number = number * 10 + (digitChar - '0');
            digitChar = cin.get();
        }
    cout << GetDigit(number);
    } 
    
}
int main()
{
    int64_t number;
    
    char digitChar;
    cout << "ISBNコードの識別番号を求めます。12桁の数字を入力してください :";
    changeDigitChar();
    if (digitChar != 10 && GetDigit(number) == 12) {
        checkSumValue();
    } else {
        cout << "12桁の数字ではありません。\n";
    }      
}
よろしくお願いします。