联发科技2021校招IC试卷A
【简答题-9】
有一套四位数加密系统,输入四位数以后会自动加密。加密规则如下:每位数字都加上 5,然后用和除以 10 的余数代替该数字,分别再将第一位和第四位交换、第二位和第三位交换,请用 C 语言写出此加密算法。
分析要点
1. 准备使用多次循环输入,while 循环,并且指定一个输入退出机制,用 break 退出外部的 while;
2. sacnf 输入时,一定注意对于 int、unsigned int 等类型的数据需要使用 & 取地址符号,而对于字符数组或者字符串是不需要用 &,直接给变量名;
代码语言:javascript复制scanf("%d",&data_in); // 注意 & 取地址符号
scanf("%s",data_in); // 对于字符串,字符数组,变量名就是数组首地址
3. 对一个四位数取每一位的数据,应该依次取模后取除法;
4. 输出要按指定格式输出,考虑输出结果是 0 或者 12 等不足 4 位数的情况,需要在前面补零,即输出 0000、0012 等;
代码语言:javascript复制printf("data_out = dnn",data_out);
注意 printf 输出和 scanf 输入的不同,printf 直接是变量名,scanf 是 & 变量名;
编程结果
代码语言:javascript复制#include <stdio.h>
int main()
{
int data_in;
char A, B, C, D;
char A1, B1, C1, D1;
int data_out;
while(1) {
printf("please input data_in: ");
scanf("%d",&data_in);
// 输入 11111 表示退出
if( data_in == 11111 ) {
printf("Exitn");
// break 退出了 while 循环
break;
}
// 取出 四位数
A = data_in / 1000;
B = (data_in % 1000) / 100;
C = (data_in % 100) / 10;
D = (data_in % 10);
// 加 5 求 余数
A1 = (A 5) % 10;
B1 = (B 5) % 10;
C1 = (C 5) % 10;
D1 = (D 5) % 10;
// 位交换 拼接
data_out = D1*1000 C1*100 B1*10 A1;
// 指定格式输出,输出 4 位,不够 4 位的前面补零到 4 位
// 比如 0,指定格式输出 0000
printf("data_out = dnn",data_out);
}
return 0;
}