本题要求实现一种数字加密方法。首先固定一个加密用正整数A,对任一正整数B,将其每1位数字与A的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对13取余——这里用J代表10、Q代表11、K代表12;对偶数位,用B的数字减去A的数字,若结果为负数,则再加10。这里令个位为第1位。
输入格式:
输入在一行中依次给出A和B,均为不超过100位的正整数,其间以空格分隔。
输出格式:
在一行中输出加密后的结果。
输入样例:
1234567 368782971
输出样例:
3695Q8118
import java.util.Scanner;
public class B1048 {
public static int max(int lA, int lB)
{
if (lA > lB)
{
return lA;
}
else
{
return lB;
}
}
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
String A = in.next();
String B = in.next();
/* BufferedReader rd = new BufferedReader(new InputStreamReader(System.in));
String s = rd.readLine();
String A = s.split(" ")[0];
String B = s.split(" ")[1];
String A = rd.read();
String B = rd.read(); */
/* System.out.print(Integer.parseInt(A));
System.out.print(Integer.parseInt(B)); */
int lenA = A.length();
int lenB = B.length();
int countA = lenA - 1;
int countB = lenB - 1;
int numA = 0;
int numB = 0;
char []output = new char[max(lenA, lenB)];
int i = 0;
int digit = 1;
while (countB >= 0 && countA >= 0)
{
numB = B.charAt(countB) - '0';
numA = A.charAt(countA) - '0';
if (digit % 2 != 0)
{
if ((numA + numB) % 13 >= 0 || (numA + numB) % 13 <= 9)
{
output[i++] = (char) ((numA + numB) % 13);
}
else
{
if ((numA + numB) % 13 == 10)
{
output[i++] = 'J';
}
if ((numA + numB) % 13 == 11)
{
output[i++] = 'Q';
}
else
{
output[i++] = 'K';
}
}
}
else
{
if (numB - numA < 0)
{
output[i++] = (char) (numB - numA + 10);
}
else
{
output[i++] = (char) (numB - numA);
}
}
countB--;
countA--;
digit++;
}
if ( countA < 0)
{
System.out.print(B.substring(0, countB+1));
for (int k = B.length() - 1; k >= 0; k--)
{
System.out.print(output[k]);
}
}
else if (countB < 0)
{
System.out.print(A.substring(0, countA+1));
for (int k = A.length() - 1; k >= 0; k--)
{
System.out.print(output[k]);
}
}
else
{
for (int k = B.length() - 1; k >= 0; k--)
{
System.out.print(output[k]);
}
}
in.close();
}
}
输入样例,只会输出36,A和B共同的部分处理后得到的output[]都没有输出?是int转换char影响结果了么?
请不要贴此题答案给我。我想知道错误原因,谢谢