最近不知道怎么了,做题不如之前顺利了,以前前三道都很快的,现在2、3题都会卡很久,,,,。
解析:1.我是先将两个PTA数补零,方便遍历N的时候就一起遍历
2.遍历N,如果这个进制表有0,就让这个数为10
3.进位我们可以单独存一个变量v,v=(pta1+pta2+v)/n,因为小除大,返回的也是0,大除小是取整,正好符合进制要求
4.我们的进制后的数是(pta1+pta2+v)%n,被余数小的话是输出它本身,大的话就是余数,也符合我们的进制要求
5.1,3测试点很坑,是你的进制数V,他可能在所有的数都处理完后还有!所以我们还要处理最后的V,也就是 V=V%10 V=V/10
public class Pta_1074 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
String a = br.readLine();//第一个运算数
String b = br.readLine();//第二个运算数
List<Integer> results = new ArrayList<Integer>();
//补零
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = new StringBuffer();
String a_zero = "";
String b_zero = "";
for (int i = 0; i < N.length() - a.length(); i++) {
a_zero += "0";
}
for (int i = 0; i < N.length() - b.length(); i++) {
b_zero += "0";
}
String P1 = String.valueOf(sb.append(a_zero + a));
String P2 = String.valueOf(sb1.append(b_zero + b));
//倒序比较
List<Integer> list = new ArrayList<>();
int flag = 0;//进位
for (int i = N.length() - 1; i >= 0; i--) {
int n = N.charAt(i) - 48;
int pta1 = P1.charAt(i) - 48;
int pta2 = P2.charAt(i) - 48;
//0的话就是10进1
if (n == 0) {
n = 10;
}
int res1 = (pta1 + pta2 + flag) % n;//要添加的数 比余数小输出它自己
list.add(res1);
flag = (pta1 + pta2 + flag) / n;//小除大是0 因为可能是n的好几倍 所以还是用除最好再因为小除大是0,符合要求。
}
//进位还有很多的情况处理
while(flag!=0){
list.add(flag%10);
flag=flag/10;
}
boolean bl = false;
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i) != 0 || i == 0) {//把前面的多余的0去掉,如果只有一位有效,其他都是0的情况,所以i==0
bl = true;
}
if (bl) {
System.out.print(list.get(i));
}
}
}
}