1048 数字加密

数字加密

题目描述:

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118

思路:

这个题目没有讲明白,如果两个字串长度不一样长,要在短的那个字符前面前面补零,还有一个坑的地方就是他题目说的第一个数字就是字符串的最后一个数字,所以要逆置接受,然后长度不相等在后面补零,得出结果再逆置输出

//这段代码在输入样例里面只会执行一次,因为一次s1="0"+s1会使s1长度增加使for语句实际执行次数少一半,和c语言不同
for i:=0;i<len(s2)-len(s1);i++{
            fmt.Println(s1)
            s1="0"+s1
        }

代码:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var s1,s2,s3 string
    list :=[13]string{"0","1","2","3","4","5","6","7","8","9","J","Q","K"}
    var sum int
    fmt.Scan(&s1,&s2)
    s1=reverse(s1)
    s2=reverse(s2)
    if len(s1)<len(s2){
        a:=len(s2)-len(s1)
        for i:=0;i<a;i++{
            s1+="0"
        }
    }else if len(s1)>len(s2){
        a:=len(s1)-len(s2)
        for i:=0;i<a;i++{
            s2+="0"
        }
    }
    for i:=0;i<len(s1);i++{
        //如果为个位
        if i %2==0{
            sum = (int(s1[i]-'0')+int(s2[i]-'0'))%13
            s3+=list[sum]
        }else{
            //如果为偶位
            sum = int(s2[i]-'0')-int(s1[i]-'0')
            if sum<0{
                sum+=10
            }
            s3+=strconv.Itoa(sum)
        }
    }
    fmt.Println(reverse(s3))
}
func reverse(s string)string{
    re:=[]rune(s)
    n:=len(re)
    for i:=0;i<n/2;i++{
        temp:=re[i]
        re[i]=re[n-i-1]
        re[n-i-1]=temp
    }
    return string(re)
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!