请问下面这个C++程序要怎么写?

这是题目:某公司通过网络传递数据,每个数据是一个四位整数,数据在传递过程中是加密的,加
密规则如下:每位数字都加上一个数字(秘钥,比如 5),然后用和除以 10 的余数代替该数
字,再将第一位和第四位交换,第二位和第三位交换。在相同的秘钥控制下,解密规则与加
密规则完全相反。
要求:本题使用 C/C++程序来实现下列功能:
1、 从文件中读入一个个四位整数,从键盘输入一个秘钥(一位整数);
2、 分别按一个四位整数的千、百、十、个位上的数进行一定的处理改变,例如输入四
位数 4556、秘钥 5,则它加密后的结果为 1009;加密后的数据保存为一个新文件。
3、 在上述秘钥控制下,解密加密后的结果,例如 1009 解密后得到 4556(秘钥 5)。
自动验证加密与解密结果是否一致。
下面是我写的一部分(解密部分不会写,惭愧):
#include<iostream>
#include<fstream>
using namespace std;
void func1();
void func2();
void func3();
int one, ten, hundred, thousand, key, newNumber,sec;
void func1()//从文件读取密码
{
ifstream out("secrect.txt");
if (!out)
{
cout << "Cannot open input file.\n";
}
out >> sec;
cout << sec<<endl;
}
void func2()//加密
{
cout<<"请输入任意密匙"<<endl;
cin >> key;
int newOne, newTen, newHundred, newThousand;
int a, b;
newOne = (one + key)% 10;
newTen = (ten + key) %10;
newHundred = (hundred + key) %10;
newThousand = (thousand + key) %10;
a = newOne, b = newTen;
newThousand = a, newHundred = b;
newNumber = newThousand * 1000 + newHundred * 100 + newTen * 10 + newOne;
cout << "newNumber= " << newNumber << endl;
}
void func3()//加密后的数据保存为一个新文件
{
ofstream myfile("newSecrect.txt", ios::out);
if(!myfile)
{
cout<<"error !";
}
else
{
myfile<<newNumber;
myfile.close();
}
}
void main()
{
func1();
int i,j;
one=sec%10;
i=sec%100;
ten=(i-one)/10;
j=sec%1000;
hundred=(j-ten*10-one)/100;
thousand=(sec-hundred*100-ten*10-one)/1000;//获取密码各数位上的数
func2();
func3();
}

   这是在你的程序基础上修改而成的,试了一下,应该可以解密了,还有你给的程序加密后的结果好像不对吧,主要是千位个位交换,十位百位交换的代码有问题。
//2015/3/12 by LDSD
#include<iostream>
#include<fstream>
using namespace std;
void func1();
void func2();
void func3();
int one, ten, hundred, thousand, key, newNumber,sec;
void func1()//从文件读取需要加密的数据
{
ifstream out("c:\\secrect.txt");
if (!out)
{
cout << "Cannot open input file.\n";
}
out >> sec;
cout << sec<<endl;
}
void func2()//加密
{
int newOne, newTen, newHundred, newThousand;
int a, b;
cout<<"请输入任意密匙"<<endl;
cin >> key;
newOne = (one + key)% 10;
newTen = (ten + key) %10;
newHundred = (hundred + key)  %10;
newThousand = (thousand + key) %10;
a = newOne;
newOne=newThousand;
newThousand = a;
a = newTen;
newTen=newHundred;
newHundred=a;
newNumber = newThousand * 1000 + newHundred * 100 + newTen * 10 + newOne;
cout << "newNumber= " << newNumber << endl;
}
void func3()//加密后的数据保存为一个新文件
{
ofstream myfile("c:\\newSecrect.txt");  
if(!myfile) 
{  
cout<<"error !";

else 
{  
myfile<<newNumber; 
myfile.close(); 
}
}
int change(int num)
{
    if(num>=key)
return num-key;
else
return 10+num-key;
}
void decryption()
//该函数用来解密加密后的数据
{
int data,a;
ifstream fin("c:\\newSecrect.txt");  //从newSecrect文件读取密文,该文件的路径是c:\\newSecrect.txt
if (!fin)
{
cout << "Cannot open input file.\n";
}
fin >> data;
thousand=data/1000;
hundred=(data-thousand*1000)/100;
ten=(data-thousand*1000-hundred*100)/10;
one=data%10;
a = one;
one=thousand;
thousand = a;
a = ten;
ten=hundred;
hundred=a;
cout<<"还原后的数据是:"<<change(thousand)<<change(hundred)<<change(ten)<<change(one)<<endl;
}

void main()
{
func1();
thousand=sec/1000;
hundred=(sec-thousand*1000)/100;
ten=(sec-thousand*1000-hundred*100)/10;
one=sec%10;//获取密码各数位上的数
func2();
func3(); 
decryption();
}

追问

你好,这个程序在执行时并未把4556加密成1009(我输入的密匙为5),我输入5时执行结果为5555,请问这是什么情况啊?

追答

你好,我这边运行的结果是对了的啊,待加密的文件你是放到c盘目录下的吗?

追问

待加密文件是不是要放在C盘目录下?

追答

嗯,放在其他目录下也行,只需要修改一下代码中的文件路径即可。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-03-12
你的题目都是不完整的。。。

怎么用c++编写一个输入输出整数的程序?
1、首先打开DEV C++软件,点击“新建源代码”,在编辑页面输入以下代码。2、因为题目要求我们先输入一个整数,所以在定义变量时,就应该将其定义为整数型,注意,在输入,输出函数中,整数型对应的是“%d”。3、接下来就要对输入的整数进行判断,在C语言中,if是判断语句,所以用它来对整数进行判断。if...

C++如何编程简单的程序
1、首先我们打开Visual Studio软件,打开新建项目界面,如下图所示 2、接下来在应用程序设置界面中选择控制台程序,然后选择空项目选项,如下图所示 3、然后我们在C++项目的源文件文件夹下面新建C++文件,如下图所示 4、最后我们在C++文件中简单的输出一些内容即可,如下图所示 工具\/材料 Visual Studio ...

C++从1加到100的程序怎么写?
在C++中,编写一个程序来计算1到100的累加值非常直接。以下是实现步骤:首先,创建一个新的C++源文件。在程序开始时,需要包含<iostream>头文件,以便使用标准输入输出:cpp#include 然后,在`main`函数中初始化一个变量`sum`为0,用于存储累加和:cppint main() { int sum = 0;接下来,使用`fo...

写出下面题目的程序代码(C++) 并且输入输出都截个图 谢谢~
map[p[i].x - minx2 + 5][p[i].y - miny2 + 5]=1; \/\/将集合A往右下角移 } }

C++求完全数的程序怎么写啊??
int main(){ int x,i,sum;x=1;while(x<=1000) \/\/x要从1到1000循环。{ sum=0; \/\/每算一个新的x时,sum要清0 for(i=1;i<x;i++){ if(x%i==0) sum+=i; \/\/如果i是x的因子,sum加上i } if(x==sum) \/\/如果因子和等于本身 cout<<x<<' '<<endl;x++;} return 0;} ...

怎么编写C语言程序,如:Helloworld的?
1、点击确定即可,创建出一个helloworld.c的小程序,然后我们就可以编写我们的Hello World小程序了。此时就需要我们的VC++ 6.0来编译此程序,编译无错误才运行此程序,编译按钮和运行按钮如下图的红色箭头处:2、或者可以点击组建工具栏下的编译菜单项,然后再点击执行菜单项,也有快捷键,按Ctrl+F7编译...

如何用C++编一个输出一句话的程序?
include<iostream.h>int main(){ cout<<" "<<endl; return 0;}只要在相隐号中输入你想要输出的话就可以了。

如何用visual studio 2010 写c++程序
简介:开发c++,首选就是vs,下面介绍的就是写C++代码最基础的hello world,很好的了解vs的开发 工具:visual studio 2010 步骤 打开visual studio 2010 点击文件,在弹出窗口中选择新建,然后选择“win32-win32控制台应用程序”,之后输入一个名称 点击“下一步”,勾选“空项目”,点击完成 右击源文件...

编写C++程序,按顺序列出某个目录下的所有文件的相对路径和最后修改时间...
编写C++程序,按顺序列出某个目录下的所有文件的相对路径和最后修改时间是一项基础但重要的任务。本文将详细介绍如何实现这一功能。首先,我们需要包含必要的头文件,如iostream、string、direct.h和ctime,以支持输入输出、字符串操作、目录访问和时间处理。以下是一个基本的示例程序:cpp include include incl...

C语言(最好C++)编一下这个程序
要是你觉得需要的话自己再添加一下就行 具体的代码如下:include <stdio.h> include <stdlib.h> include <string.h> include <iostream.h> struct Info { char name[10];int weight;char sex;struct Info * Next;};struct Info *temp, *rMale;struct Info *teacher, *Male, *Female, *Mp...

相似回答