主题:[讨论]如何将“广义凯撒密码”的C语言程序改写成JAVA?
实现“广义凯撒密码”的C语言程序如下所示:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
int gcd(int a, int b) /*辗转相除法求a,b的最大公因数*/
{
int k = 0;
do
{
k = a%b;
a = b;
b = k;
}while(k!=0);
return a;
}
int Ni(int a, int b) /*求a相对于b的逆*/
{
int i = 0;
while(a*(++i)%b!=1);
return i;
}
void Jiami() /*仿射密码加密*/
{
char c[100];
int length, i=0, ka=0, kb=0;
system("cls");
printf("********Jiami********\nPlease input primal sentence: ");
gets(c);
length = strlen(c);
printf("Input the key(2 numbers): ");
scanf("%d,%d", &ka, &kb);
getchar();
if(gcd(ka,26)!=1)
{
printf("The value of the key is error!\nPress any key to return...");
return;
}
for(i=0; i<length; i++)
{
if(c[i]>96&&c[i]<123)
c[i] = (ka*(c[i]-97)+kb)%26+65;
else if(c[i]>64&&c[i]<91)
c[i] = (ka*(c[i]-65)+kb)%26+65;
}
printf("Result is: %s\n", c);
printf("Press any key to return...");
getch();
}
void Jiemi()
{
char c[100];
int length, i=0, ka=0, kb=0,tmp;
system("cls");
printf("********Jiemi********\nPlease input ciphertext: ");
gets(c);
length = strlen(c);
printf("Input the key(2 numbers): ");
scanf("%d,%d", &ka, &kb);
getchar();
if(gcd(ka,26)!=1)
{
printf("The value of the key is error!\nPress any key to return...");
return;
}
for(i=0; i<length; i++)
{
if(c[i]>64&&c[i]<91)
{
tmp = Ni(ka,26)*((c[i]-65)-kb);
if(tmp<0)
c[i] = tmp%26+26+97;
else
c[i] = tmp%26+97;
}
}
printf("\nAfter translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
printf("Press any key to return...");
getch();
}
void main()
{
char i = '0';
system("cls");
while(i!='3')
{
system("cls");
printf("********Press 1~3 to choose:********\n");
printf("1.Jiami\n2.Jiemi\n3.Exit \n");
i = getch();
if(i=='1')
Jiami();
else if(i=='2')
Jiemi();
else if(i=='3')
break;
}
}
因为刚刚学习JAVA,不知道如何把该程序改写成JAVA程序?请各位老大赐教。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
int gcd(int a, int b) /*辗转相除法求a,b的最大公因数*/
{
int k = 0;
do
{
k = a%b;
a = b;
b = k;
}while(k!=0);
return a;
}
int Ni(int a, int b) /*求a相对于b的逆*/
{
int i = 0;
while(a*(++i)%b!=1);
return i;
}
void Jiami() /*仿射密码加密*/
{
char c[100];
int length, i=0, ka=0, kb=0;
system("cls");
printf("********Jiami********\nPlease input primal sentence: ");
gets(c);
length = strlen(c);
printf("Input the key(2 numbers): ");
scanf("%d,%d", &ka, &kb);
getchar();
if(gcd(ka,26)!=1)
{
printf("The value of the key is error!\nPress any key to return...");
return;
}
for(i=0; i<length; i++)
{
if(c[i]>96&&c[i]<123)
c[i] = (ka*(c[i]-97)+kb)%26+65;
else if(c[i]>64&&c[i]<91)
c[i] = (ka*(c[i]-65)+kb)%26+65;
}
printf("Result is: %s\n", c);
printf("Press any key to return...");
getch();
}
void Jiemi()
{
char c[100];
int length, i=0, ka=0, kb=0,tmp;
system("cls");
printf("********Jiemi********\nPlease input ciphertext: ");
gets(c);
length = strlen(c);
printf("Input the key(2 numbers): ");
scanf("%d,%d", &ka, &kb);
getchar();
if(gcd(ka,26)!=1)
{
printf("The value of the key is error!\nPress any key to return...");
return;
}
for(i=0; i<length; i++)
{
if(c[i]>64&&c[i]<91)
{
tmp = Ni(ka,26)*((c[i]-65)-kb);
if(tmp<0)
c[i] = tmp%26+26+97;
else
c[i] = tmp%26+97;
}
}
printf("\nAfter translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
printf("Press any key to return...");
getch();
}
void main()
{
char i = '0';
system("cls");
while(i!='3')
{
system("cls");
printf("********Press 1~3 to choose:********\n");
printf("1.Jiami\n2.Jiemi\n3.Exit \n");
i = getch();
if(i=='1')
Jiami();
else if(i=='2')
Jiemi();
else if(i=='3')
break;
}
}
因为刚刚学习JAVA,不知道如何把该程序改写成JAVA程序?请各位老大赐教。