java 构造回文_String类Byte数组构造方法与ASCII码的简单结合。。题解1161:【回文数(二)】 (Java代码)...

解题思路:

String类数组构造方法与ASCII码的简单结合。。

代码块有点长,但思路很简单。。

注意事项:

已在代码块部分标明注释

参考代码:

import java.util.Scanner;

public class A1161{

public static void main(String args[]) {

Scanner sc = new Scanner(System.in);

int N = sc.nextInt();// 进制数

String s0 = sc.next(); // 进制数数值

int STEP = 0;

for (int n = 1; n <= 31; n++) {

if (n == 31) {

System.out.println("Impossible!");

break;

}

//利用StringBuffer类直接翻转字符串

StringBuffer s2 = new StringBuffer(s0);

String s1 = s2.reverse().toString();

if (s0.equals(s1) == true) {

System.out.println("STEP=" + STEP);

break;

}

//模拟N进制加法运算,满N向高位进1

int t = 0;// 向高位的进位,最低位进位为0.此语句位置不能放在循环里

byte[] a = new byte[s0.length() + 1];    //数组长度加一,其中a【0】保存最高一位,参考下面**代码理解

for (int i = s0.length() - 1; i >= 0; i--) {

int w, e;   //选用Byte型数组,所以需要明白ascii码字符与对应的十进制数

if (s0.charAt(i) >= 'A' && s0.charAt(i) <= 'F') {    //if与else语句为了求11即以上进制的两个加数

w = s0.charAt(i) - 55;   //*******正向转换(与下述反向转换进行对照理解)

} else {

w = s0.charAt(i) - 48;

}

if (s1.charAt(i) >= 'A' && s1.charAt(i) <= 'F') {

e = s1.charAt(i) - 55;

} else {

e = s1.charAt(i) - 48;

}

int y = (w + e + t) % N;

if (y >= 10 && y <= 15) {

a[i + 1] = (byte) (y + 55);   //******反向转换

} else {

a[i + 1] = (byte) (y + 48);

}

if (w + e + t >= N) {    //求向高位的进位

t = 1;

} else {

t = 0;

}

}

//*********为最高位赋值

if (t == 1) {            //最高为赋值,与上面不一样,只有0和1两种情况

a[0] = 1 + 48;

s0 = new String(a);

} else {

a[0] = 0 + 48;

s0 = new String(a, 1, a.length - 1);

}                           //***************最高为赋值结束

STEP++;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值