某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
然后,把加密后的结果在控制台打印出来。
题目要求:
A:数据是小于8位的整数
定义一个int类型的数据
int number = 123456;
B:加密规则
a:首先将数据倒序
结果 654321
b:然后将每位数字都加上5,再用和除以10的余数代替该数字
结果 109876
c:最后将第一位和最后一位数字交换
结果 609871
C:把加密后的结果输出在控制台
#include <stdio.h>
/*
函数名:jiami
参数列表:整型数,字符数组首地址
函数功能:加密整型数input到字符数组array中
返回值:无
*/
int jiami(int input, char array[])
{
//传递参数检查
if(array == NULL)
{
return -1;
}
if(input < 0 || input > 99999999)
{
return -1;
}
int a[8]={0};
int len=0;
int i=0;
while(input != 0) //将输入值反序存入数组a[8]中
{
a[i]=input%10;
input=input/10;
i++;
len++;
}
for(i = 0; i < len; i++) //加密过程
{
a[i]=(a[i]+5)%10;
}
int temp = a[0];
a[0] = a[len-1];
a[len-1] = temp; //加密结束
for(i=0;i<len;i++)
{
array[i]=a[i]+'0'; //将加密后的结果数组a[8]转换成字符并存入array[]
}
return 1;
}
/*
函数名:jiemi
参数列表:字符数组首地址
函数功能:将字符数组中的字符型数字解密成一个整形数
返回值:整型值
*/
int jiemi(char *pe)
{
if(pe == NULL)
{
return -1;
}
int i=0;
int a[8] = {0};
int len = 0;
int num = 0;
char *p = pe;
while(*p != 0) //字符数组值存入整型数组
{
a[i]=*p-'0';
i++;
len++;
p++;
}
int temp = a[0]; //开始解密
a[0] = a[len-1];
a[len-1] = temp;
for(i=0;i<len;i++)
{
if(a[i] < 5)
{
a[i] = a[i]+5;
}
else
{
a[i] = a[i]-5;
}
}
for(i=0;i<len;i++)
{
num=10*num+a[len-1-i];
}
return num;
}
int main()
{
int number;
char encrypted[10]={0};
printf("Input number=");
scanf("%d",&number); //输入number
jiami(number,encrypted); //加密number到字符数组encrypted中
printf("加密 = %s\n",encrypted); //输出加密后的结果
printf("解密 = %d\n",jiemi(encrypted)); //输出解密后的结果
return 0;
}