博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT——1074. 宇宙无敌加法器(20)
阅读量:4653 次
发布时间:2019-06-09

本文共 3052 字,大约阅读时间需要 10 分钟。

地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在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数之和。

输入样例:

3052706203415

输出样例:

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
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 }

 

 

转载于:https://www.cnblogs.com/xiaxj/p/8006234.html

你可能感兴趣的文章
React接入Sentry.js
查看>>
ssh自动分发密匙脚本样板
查看>>
转 小辉_Ray CORS(跨域资源共享)
查看>>
Linux安装postgresql
查看>>
MyBatis启动:MapperStatement创建
查看>>
【 全干货 】5 分钟带你看懂 Docker !
查看>>
[转]优化Flash性能
查看>>
popStar手机游戏机机对战程序
查看>>
lambda表达式树
查看>>
二次注入原理及防御
查看>>
会话记住已登录功能
查看>>
Linux内核分析——可执行程序的装载
查看>>
第一阶段冲刺3
查看>>
父类引用指向子类对象
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>
章三 链表
查看>>
Solution for Concurrent number of AOS' for this application exceeds the licensed number
查看>>