题目:
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
然后,把加密后的结果在控制台打印出来。
题目要求:
A:数据是小于8位的整数
定义一个int类型的数据
int number = 123456;
B:加密规则
a:首先将数据倒序
结果 654321
b:然后将每位数字都加上5并除以10的余数代替该数字
结果 109876
c:最后将第一位和最后一位数字交换
结果 609871
C:把加密后的结果输出在控制台
* 注: 本程序使用到变长数组 有的编译器是不能通过编译的
C实现程序:
#include<stdio.h>
//10的m次幂
int f10m(int m)
{
if(m<0)
return -1;
int mul=1;
int i;
for(i=1;i<m+1;i++)
{
mul*=10;
}
return mul;
}
// 求出整数的位数
int bits_integer(int integer)
{
int count=0;
while(integer/f10m(count))
count++;
return count;
}
// 求出整数对应位的值 (从右向左数)
int value_bit(int integer,int bit)
{
return integer%(f10m(bit))/(f10m(bit-1));
}
// int类型两位交换
void myswap(int*a,int*b)
{
if(NULL==a||NULL==b)
return;
int tmp=*a;
*a=*b;
*b=tmp;
}
//
// 整数===>数组
// 参数:
// flag=0 //逆序(数组第一位为最低位)
// flag!=0 //顺序(数组第一位为最高位)
// p指向转入的数组
void integer2array(int*p,int integer,int bits,int flag)
{
if(NULL==p)
return ;
int i;
for(i=0;i<bits;i++)
{
if(flag) //顺序(数组第一位为最高位)
p[i]= value_bit(integer,bits-i);
else //逆序(数组第一位为最低位)
p[i]= value_bit(integer,i+1);
}
}
/// flag=0 //数组第一位为整数最高位)
// flag!=0 //数组第一位为整数最高位)
// 数组===>整数
int array2integer(int*array,int len,int flag)
{
if(NULL==array)
return -1 ;
int integer=0;
int i;
if(flag) //数组第一位为整数最高位
for(i=0;i<len;i++)
{
integer+=array[i]*f10m(len-1-i);
}
else //数组第一位为整数最高位
for(i=0;i<len;i++)
{
integer+=array[i]*f10m(i);
}
return integer;
}
//加密
int code(int integer)
{
//将整数每一位从后向前存入数组中
int bits=bits_integer(integer);
int a[bits];
integer2array(a,integer,bits,0);
//数组对应的数转化为整数
int sum_integer=0;
int i;
for(i=0;i<bits;i++)
{
a[i]=(a[i]+5)%10;
sum_integer+=a[i]*f10m(bits-1-i);
}
//将余数每一位放入数组中
//int b_bits=bits_integer(sum_integer);
int b[bits];
integer2array(b,sum_integer,bits,1);
//交换首尾位的数
myswap(&b[0],&b[bits-1]);
//求出加密后的数
//数组对应的数转化为整数
int code_integer= array2integer(b,bits,1);
return code_integer;
}
int decode(int code_integer)
{
int bits=bits_integer(code_integer);
// 整数转数组
int a[bits]={0};
integer2array(a,code_integer,bits,1);
myswap(&a[0],&a[bits-1]);
// 数组转整型
int tmp_integer=array2integer(a,bits,1);
// printf("%d\n",tmp_integer);
// 整数转数组
int b[bits]={0};
integer2array(b,tmp_integer,bits,1);
int i;
for(i=0;i<bits;i++)
{
if(b[i]<5)
b[i]=b[i]+5;
else
b[i]=b[i]-5;
}
int integer=array2integer(b,bits,0);
return integer;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",code(n));
printf("%d\n",decode(code(n)));
return 0;
}