zoukankan      html  css  js  c++  java
  • PAT——1074. 宇宙无敌加法器(20)

    地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个PAT星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是7进制数、第2位是2进制数、第3位是5进制数、第4位是10进制数,等等。每一位的进制d或者是0(表示十进制)、或者是[2,9]区间内的整数。理论上这个进制表应该包含无穷多位数字,但从实际应用出发,PAT星人通常只需要记住前20位就够用了,以后各位默认为10进制。

    在这样的数字系统中,即使是简单的加法运算也变得不简单。例如对应进制表“0527”,该如何计算“6203+415”呢?我们得首先计算最低位:3+5=8;因为最低位是7进制的,所以我们得到1和1个进位。第2位是:0+1+1(进位)=2;因为此位是2进制的,所以我们得到0和1个进位。第3位是:2+4+1(进位)=7;因为此位是5进制的,所以我们得到2和1个进位。第4位是:6+1(进位)=7;因为此位是10进制的,所以我们就得到7。最后我们得到:6203+415=7201。

    输入格式:

    输入首先在第一行给出一个N位的进制表(0 < N <=20),以回车结束。 随后两行,每行给出一个不超过N位的正的PAT数。

    输出格式:

    在一行中输出两个PAT数之和。

    输入样例:

    30527
    06203
    415
    

    输出样例:

    7201

     1 package com.hone.basical;
     2 
     3 import java.util.Scanner;
     4 import java.util.Stack;
     5 /**
     6  * 原题目:https://www.patest.cn/contests/pat-b-practise/1069
     7  * @author Xia
     8  * 因为数据比较长,所以建议用字符串来处理,先补齐字符串,然后将数字字符串一个个转化为int来处理。
     9  * 最后用stack来保存数据  有两个测试点没有过!!!
    10  */
    11 
    12 public class basicalLevel1074addMachine {
    13 
    14     public static void main(String[] args) {
    15         Scanner in = new Scanner(System.in);
    16         String N = in.nextLine();
    17         //用数组表示进制,左边的表示高进制,右边的表示低进制
    18         int[] jz = new int[20];                
    19         for (int i = N.length()-1,j = 0; i >= 0; i--,j++) {
    20             jz[j] = Integer.parseInt(N.substring(i, i+1));
    21         }
    22         String a = in.nextLine();
    23         String b = in.nextLine();
    24         int sum = 0;
    25         //这里面采用堆栈来保存最终的结果,因为最后的结果是到这输出的。
    26         Stack<Integer> sum2 = new Stack<>();
    27         
    28         //进制相加的时候可以在前面补齐,使两者长度一致
    29         if (a.length()>b.length()) {
    30             for (int i = 0; a.length()>b.length(); i++) {
    31                 b="0"+b;
    32             }
    33         }else {
    34             for (int i = 0; i < b.length()-a.length(); i++) {
    35                 a="0"+a;
    36             }
    37         }
    38         int jw = 0;                //表示进位
    39         int k = 0;
    40         for (int i = 0; i < a.length(); i++) {
    41             int x = Integer.parseInt(a.substring(a.length()-1-i, a.length()-i));
    42             int y = Integer.parseInt(b.substring(b.length()-1-i, b.length()-i));
    43             int m = x+y+jw;
    44             if ((jz[i] == 0||jz[i]>20)) {
    45                 if (m >= 10) {
    46                     jw = 1;
    47                     k = m - 10;
    48                     sum2.add(k);
    49                 }else {
    50                     jw = 0;
    51                     sum2.add(m);
    52                 }
    53             }else if((jz[i]>1&&jz[i]<=20)){
    54                 if (m >= jz[i]) {
    55                     jw = 1;
    56                     k = m - jz[i];
    57                     sum2.add(k);
    58                 }
    59                 else {
    60                     jw = 0;
    61                     sum2.add(m);
    62                 }
    63             }
    64         }
    65         /*while (!sum2.isEmpty()) {
    66             System.out.print(sum2.pop());
    67         }*/
    68         String numS = "";
    69         while (!sum2.isEmpty()) {
    70             numS = numS+sum2.pop();
    71         }
    72         System.out.println(Long.parseLong(numS));    
    73     }
    74 }





  • 相关阅读:
    洛谷
    洛谷
    洛谷
    模板
    洛谷
    洛谷
    Codeforces Round #561 (Div. 2) E. The LCMs Must be Large(数学)
    Codeforces Round #561 (Div. 2)
    Mail.Ru Cup 2018 Round 2 C. Lucky Days(拓展欧几里得)
    The 10th Shandong Provincial Collegiate Programming Contest H.Tokens on the Segments(贪心+优先级队列 or 贪心+暴力)
  • 原文地址:https://www.cnblogs.com/xiaxj/p/8006234.html
Copyright © 2011-2022 走看看