急需解密程序!!!请C++大虾帮忙解道题!

来源:百度知道 编辑:UC知道 时间:2024/06/11 08:20:48
C++加密与解密程序。 刚在网上看到一个题目的加密程序,如下。急需此题相对应的解密程序,并在每行程序后面加以注释,迫切希望编程大虾的帮忙,必将非常感激!!!

题目:编写一个简单的加密程序:输入四位整数,按照以下加密算法处理后,生成加密后的四位整数输出。
加密算法:(每一位的数字+8)mod 10,处理后的数字中第1位和第四位交换,第2位和第3位交换。

运行示例:
输入四位整数: 7523
加密后的四位整数是: 1035

加密程序:
#include"iostream.h"
void main()
{
int n, a[4], m;
cout<<"请输入一个四位整数:\n";
cin>>n;
a[0]=n/1000;
a[1]=n%1000/100;
a[2]=n%100/10;
a[3]=n%10;
for (int i=0; i<4; i++)
a[i]=(a[i]+8)%10;
m=a[0], a[0]=a[3], a[3]=m;
m=a[1], a[1]=a[2], a[2]=m;
int p=a[0]*1000+a[1]*100+a[2]*10+a[3];
cout<<p<<endl;
}

SORRY 刚才稍有错误,现在改好了
#include"iostream.h"
void main()
{
int n, a[4], m;
cout<<"请输入一个四位整数:\n";
cin>>n;
a[0]=((n/1000)+2)%10; 取千位,然后千位数加2,前面加密的不是加8了么,等于是加8再加2相当于加10,然后再模10,就是没变了后面的加2不再解释了
a[1]=((n/100%10)+2)%10; 取百位
a[2]=((n/10%10)+2)%10; 取十位
a[3]=(n+2)%10; 取个位

int p=a[3]*1000+a[2]*100+a[1]*10+a[0]; 14,23位置对调,看尾标比较好记,0是千位现在在个位,3是个位现在在千位,2是十位现在在百位,1是百位现在在十位
cout<<p<<endl;
}

其他的就不用解释了吧
其实你的加密程序也可以按这个架子写,不用那个加8换位的循环

#include <stdio.h>
void decrypt(int n, char* res)
{
char ch;
int i;
sprintf(res, "%d", n);
ch = *res;
*res = *(res + 3);
*(res + 3) = ch;
ch = *(res + 1);
*(res + 1) = *(res + 2);
*(res + 2) = ch;
for(i = 0; i < 4; i++)
{
ch = *(res + i) - 46;
*(res + i) = ch % 10 + 48;
}
}
int main(void)
{
int