PA-通用商品碼校驗碼產生器

2022.11.07 AM 11:00 by CBJ

來源 : https://drive.google.com/file/d/1CMnis82zw9hGQHW1pRv3LFXACoUGA90Y/view
出題者 : 108資訊學科能力競賽複賽-彰雲嘉
標籤 : 字串處理、迴圈控制、例外處理
難易度 : 2

解題想法 : 例外處理完後,將各位數相加(記得轉成整數型態再相加),並求出使總和能被10整除的校驗碼(題解中的ans)

//C++ language
//solution link(含註解): https://github.com/CBJ0519/CBJsProgramDiary.com/blob/main/%E8%B3%87%E8%A8%8A%E5%AD%B8%E7%A7%91%E8%83%BD%E5%8A%9B%E7%AB%B6%E8%B3%BD/108%E5%BD%B0%E9%9B%B2%E5%98%89/PA-%E9%80%9A%E7%94%A8%E5%95%86%E5%93%81%E7%A2%BC%E6%A0%A1%E9%A9%97%E7%A2%BC%E7%94%A2%E7%94%9F%E5%99%A8.cpp

#include<iostream>
#include<string>  
#include<cctype>  
using namespace std;
int main(){
    int n;
    cin>>n;  
    while(n--){  
        string s;  
        cin>>s;   
        if(s.length()!=11){ 
            cout<<-1<<"\n";
            return 0; 
        }
        int total=0;  
        for(int i=0;i<s.length();i++){  
            if(!isdigit(s[i])){  
                cout<<-1<<"\n";
                return 0;  
            }
            if(i%2){  
                total+=s[i]-'0';  
            }
            else{  
                total+=(s[i]-'0')*3;  
            }
        }
        int ans=10-(total%10);  
        cout<<ans<<"\n";   
    }
    return 0;
}
## Python language
## solution link(含註解): https://github.com/CBJ0519/CBJsProgramDiary.com/blob/main/%E8%B3%87%E8%A8%8A%E5%AD%B8%E7%A7%91%E8%83%BD%E5%8A%9B%E7%AB%B6%E8%B3%BD/108%E5%BD%B0%E9%9B%B2%E5%98%89/PA-%E9%80%9A%E7%94%A8%E5%95%86%E5%93%81%E7%A2%BC%E6%A0%A1%E9%A9%97%E7%A2%BC%E7%94%A2%E7%94%9F%E5%99%A8.py

n=int(input())   
for i in range(n): 
    s=input()   
    if len(s)!=11:  
        print(-1)
        exit(0)  
    total=0  
    for j in range(len(s)):  
        if not s[j].isdigit():  
            print(-1)
            exit(0)
        if j%2: total+=int(s[j])  
        else: total+=int(s[j])*3  
    print(10-(total%10))  

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *