一个简单的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里面报错好几处。。。可能是编译器的问题吧 展开
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里面报错好几处。。。可能是编译器的问题吧 展开
1个回答
展开全部
写好了
不能算小数,根据你的题意来的,如果输入小数,则只取整数部分运算,结果不能为负数
#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]
追问
很抱歉我第一次提问没写清楚,补充在问题里了,如果可以的话麻烦您再看一下吧。很抱歉啊~~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询