文章

6

粉丝

29

获赞

0

访问

935

头像
求解校验码 题解:
P1928 复旦大学2017年机试题
发布于2024年3月19日 19:58
阅读数 115

简单模拟题,使用C++string类更为方便。要注意什么时候是char什么时候是int,可以用to_string函数进行转换

#include <iostream>
#include <string>
using namespace std;

int main() {
    string input;
    getline(cin, input); // 读取一行文本到string变量input

    int weight = 10; // 初始化权重
    int sum = 0; // 初始化和为0
    // 遍历输入的字符串
    for(auto c : input){
        if(c != '-'){ // 忽略'-'
            sum += ((c - '0') * weight); // 将字符转换为数字并加权
            weight--; // 权重递减
        }
    }
    // 计算模11的余数
    int M = sum % 11;
    int res = 11 - M; // 计算校验码
    // 根据校验码的值设定最后一个字符
    if(1 <= res && res <= 9){
        last = to_string(res); // 校验码在1到9之间
    }
    if(res == 10) last = "X"; // 校验码为10时,使用“X”
    if(res == 11) last = "0"; // 校验码为11时,实际上是0

    string output = input + "-" + last; // 生成输出字符串
    cout << output; // 输出结果
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发