一个简单的C语言算法,帮忙写个反向运算源码

#include<stdio.h>intmain(){charplain[20][10],ch;inti=0,j=0,len=0;ch=getchar();while(c... #include<stdio.h>
int main()
{
char plain[20][10], ch;
int i=0, j=0, len=0;
ch=getchar();
while(ch!=EOF){
if(ch!=' '){
plain[i][j%10]=ch;
j++;
if(j%10==0)
i++;
len++;
}
ch=getchar();
}
for(j=0;j<10;j++)
for(i=0;i<len/10;i++)
printf("%c",plain[i][j]);
if(len%10 !=0)
for(j=0;j<len%10;j++)
printf("%c",plain[i][j]);

}
谁能帮忙写出反向运算的源码呢?谢谢大家了。
抱歉我没说清楚,我给的加密算法题目要求是下面这个
线路加密法中,明文的字母按规定的次序排列在矩阵中,然后用另一种次序选出矩阵中的字母,排列成密文。如纵行换位密码中,明文以固定的宽度水平写出,密文按垂直方向读出。具体明文:“DEPARTMENT OF COMPUTER SCIENCE AND TECHNOLOGY”在忽略空格的情况下转换为:
DEPARTMENT
OFCOMPUTER
SCIENCEAND
TECHNOLOGY
然后垂直方向读出,构成密文。具体为:
DOSTEFCEPCICAOEHRMNNTPCOMUELETAONENGTRDY
解密即加密算法的逆运算。

现在希望得到的是用C语言写的解密算法,就是输入上面的密文,然后输出最开始的明文。不用考虑数字什么的。
很抱歉,如果可以的话麻烦修改一下您的代码,而且您这个代码在VC6.0里面报错好几处。。。可能是编译器的问题吧
展开
 我来答
碧血玉叶花
推荐于2016-07-05 · TA获得超过4976个赞
知道大有可为答主
回答量:6154
采纳率:0%
帮助的人:1631万
展开全部

写好了
不能算小数,根据你的题意来的,如果输入小数,则只取整数部分运算,结果不能为负数 

#include 
#include 
#include 
int deal(int op1,int op2,char op) //运算 

switch(op) 

case '+':op1 += op2; break; 
case '-':op1 -= op2; break; 
case '*':op1 *= op2; break; 
case '/':op1 /= op2; break; 
case '^':

int temp = op2; 
for(int i = 1; i < op2 - 1; i++) 
op1 *= temp; 
break; 


return op1; 

char *replace(char *source,char *sub,char *rep) //字符串替换 

char *result; 
char *pc1,*pc2,*pc3; 
int isource,isub,irep; 
isub = strlen(sub); 
irep = strlen(rep); 
isource = strlen(source); 
if(NULL == *sub) 
return strdup(source); 
result = (char *)malloc(( (irep > isub) (float)strlen(source) / isub* irep+ 1:isource ) * sizeof(char)); 
pc1 = result; 
while(*source != NULL) 

pc2 = source; 
pc3 = sub; 
while(*pc2 == *pc3 && *pc3 != NULL && *pc2 != NULL) 
pc2++,pc3++; 
if(NULL == *pc3) 

pc3 = rep; 
while(*pc3 != NULL) 
*pc1++ = *pc3++; 
pc2--; 
source = pc2; 

else 
*pc1++ = *source; 
source++; 

*pc1 = NULL; 
return result; 

int main() 

char s[1000],op1[100],op2[100],*p,*temp,*back; 
scanf("%s",&s); 
temp = s; 
back = s; 
int pos = -1; 
int fin,oper1,oper2,tmp,size; 
char op; 
while(1) 

size = (int)strlen(temp); 
for(int i = 0; i < size; i++,temp++) 

if( *temp == '(') 

p = (temp + 1); 
pos =(i + 1); //找出最后一个(的位置 


int k = 0; 
if(pos != -1) 

temp = back; 
tmp = pos; 
while(*p != ')') 

p++; 
tmp++; 
if( *p == '*' || *p == '/') 

tmp--; 
for(;(temp[tmp] >= '0' && temp[tmp] = '0' && temp[pos] = '0' && temp[pos] = '0' && temp[pos] = '0' && temp[pos]
追问
很抱歉我第一次提问没写清楚,补充在问题里了,如果可以的话麻烦您再看一下吧。很抱歉啊~~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式