女青年与西西 2017-11-27 13:51 采纳率: 0%
浏览 2399
已采纳

int转化char变成数组,影响输出了么?

本题要求实现一种数字加密方法。首先固定一个加密用正整数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影响结果了么?

请不要贴此题答案给我。我想知道错误原因,谢谢

  • 写回答

4条回答 默认 最新

  • littlebai07 2017-11-27 14:35
    关注

    首先,num - ‘0’ 之后,再次转换成char 应 + '0'

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题