CSUFT 1003 All Your Base
1003: All Your Base
| Time Limit: 1 Sec | Memory Limit: 128 MB | |
| Submit: 4 | Solved: 2 |
Description
Premise: Given a specification for a “base” (well, actually a mixed radix number system), take in pairs of numbers written in our “base”, perform a specified operation on them and output the result in our base.
The Base: A number system where the right-most digit (digit 1) can be a counting number between 0 and 1, the second right-most digit (digit 2) can be a counting number between 0 and 2 and, more generally, each digit n (as labeled from the right) can have values between 0 and n. After 9, upper case letters are used, starting with A and going through Z. After the highest digit (which can be 0-Z), no further digits are possible; any numbers which go past that digit are invalid. Negative numbers are prefixed with a single “-” sign. Numbers never have leading zeros, with the exception of zero itself, which is represented by a single “0” character.
Operations: Addition (+) and subtraction (-): The numbers are added or subtracted as normal (including carrying, borrowing, etc).
Input
- The first line of input is the number (base 10) of operations that need to be performed.
- Each following line will be at most 1000 bytes and will consist of a variable-radix number, a space, a single character indicating the operation (+, or -), a space, another variable-radix number, and a newline (LF).
- Either number for any operation (and also the result) may be negative.
Output
- For each operation in the input, a single line of output should be produced containing either the result (a variable-radix number) or the string “Invalid”) (without quotes) followed by a newline (LF).
- If either of the input numbers or the resulting number is not valid in the number system, or an error is encountered while performing the operation, the result is invalid.
Sample Input
3
3 + 5
9987654321 + 1
-A000000000 - 1
Sample Output
Invalid
A000000000
-A000000001
HINT
Source
//package Main;
import java.util.*;
import java.math.*;;
public class Main {
BigInteger[] digit = new BigInteger[40];
BigInteger A, B, C;
boolean flag = true;
void Getdigit() {
digit[1] = BigInteger.ONE;
for(int i=2;i<40;i++) {
digit[i] = digit[i-1].multiply(BigInteger.valueOf(i));
}
}
int GetVal(char c) {
if(c<='9'&&c>='0')
return c-'0';
else return c-'A'+10;
}
char RetVal(BigInteger i) {
if(i.intValue()<10)
return (char)(i.intValue()+'0');
else return (char)(i.intValue()-10+(int)'A');
}
BigInteger Check(String num) {
BigInteger ret = BigInteger.ZERO;
for(int i=num.length()-1,base = 2;i>=0;i--,base++) {
if(num.charAt(i)=='-') break;
int tm = GetVal(num.charAt(i));
if(tm>=base)
{
flag = false;
return ret;
}
ret = ret.add(digit[base-1].multiply(BigInteger.valueOf(tm)));
}
if(ret.compareTo(digit[36])>=0) {
flag = false;
return ret;
}
if (num.charAt(0)=='-') {
ret = BigInteger.ZERO.subtract(ret);
}
return ret;
}
void Print(BigInteger num) {
if(num.compareTo(BigInteger.ZERO)<0)
{
System.out.printf("-");
num = BigInteger.ZERO.subtract(num);
}
int i = 35;
for(;i>1;i--) {
if(num.divide(digit[i]).compareTo(BigInteger.ZERO)>0)
break;
}
for(;i>=1;i--) {
System.out.printf("%c", RetVal(num.divide(digit[i])));
num = num.mod(digit[i]);
}
System.out.println();
}
void main() {
Getdigit();
String num1, num2, op;
Scanner cin = new Scanner(System.in);
int cas = cin.nextInt();
for (int i = 0; i < cas; i++) {
flag = true;
num1 = cin.next();
op = cin.next();
num2 = cin.next();
A = Check(num1);
B = Check(num2);
if (!flag) {
System.out.println("Invalid");
continue;
}
if (op.charAt(0) == '+') {
C = A.add(B);
} else {
C = A.subtract(B);
}
if (C.abs().compareTo(digit[36]) >= 0) {
System.out.println("Invalid");
continue;
} else {
Print(C);
}
}
}
public static void main(String[] args) {
new Main().main();
}
}
/**************************************************************
Problem: 1003
User: YinJianZuiShuai
Language: Java
Result: Accepted
Time:196 ms
Memory:8424 kb
****************************************************************/
CSUFT 1003 All Your Base的更多相关文章
- 【笔记】Unix 平台标准
POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEE ...
- 我眼中的Linux设备树(六 memory&chosen节点)
六 memory&chosen节点根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点.memory节点用来描述硬件内存布局的.如果有多块内存,既可以通过多个memor ...
- Linux设备树(六 memory&chosen节点)
六 memory&chosen节点 根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点.memory节点用来描述硬件内存布局的.如果有多块内存,既可以通过多个memo ...
- Linux就这个范儿 第19章 团结就是力量 LSB是Linux标准化基地(Linux Standards Base)的简称
Linux就这个范儿 第19章 团结就是力量 LSB是Linux标准化基地(Linux Standards Base)的简称 这个图片好可爱,它是LSB组织的图标.你肯定会问:“图标这么设计一定有说 ...
- 1003: [ZJOI2006]物流运输 最短路+dp
https://www.lydsy.com/JudgeOnline/problem.php?id=1003 数据范围很小,怎么瞎搞都行,n方dp,然后跑出最短路暴力转移,需要注意的是不能使用的可能有多 ...
- 小白解决CENTOS7错误:Cannot find a valid baseurl for repo: base/7/x86_6
刚入手的MacBook想着学点东西,本汪还是决定玩玩CentOS服务器,安装好了VirtualBox + CentOS. 打开一看,懵逼了!命令行! 行吧,先装个图形界面: $sudo yum gro ...
- 分布式系列文章——从ACID到CAP/BASE
事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...
- base的应用
------------父类 public class Person { public Person(string name,int age) { this.Na ...
- C# base 64图片编码解码
使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...
随机推荐
- java collections读书笔记(8)collection框架总览(1)
- Groupon面经Prepare: Max Cycle Length
题目是遇到偶数/2,遇到奇数 *3 + 1的题目,然后找一个range内所有数字的max cycle length.对于一个数字,比如说44,按照题目的公式不停计算,过程是 44, 22, 11, 8 ...
- lvs负载均衡的搭建
lvs负载均衡的搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在部署环境前,我们需要了解一下一些协议 一.什么是arp 地址解析协议,即ARP(Addr ...
- Java基础(38):Calendar类的应用(优于Date类)
Calendar 类的应用 Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calen ...
- linux 修改端口限制
1.显示当前临时端口的范围:一般情形下:linux临时端口号范围是(32768,61000) sysctl net.ipv4.ip_local_port_range 或 cat ...
- sql except 用法,找两个表中非共同拥有的
;with tt as (select a.id as id from [dbo].[1234] a where a.id not in (select a.ProtocolID from Proto ...
- javascript 操作dom
Node往往被翻译为节点,在一个对象(可以简单的理解为是HTML页面中),一个属性name="aaa"可以是一个节点,一个< div id="aaa"&g ...
- JavaScript 闭包整合
初遇闭包感觉很困惑,上网查看了些许介绍,有很多没看懂,就想先对能懂的东西整整 首先觉得要了解闭包,要先对一.JavaScript的变量作用域和作用域链有基本了解 1.变量的作用域分为:全局变量和局部变 ...
- MYSQL 下一些常用操作命令:新建用户、修改密码、修改登录host等
1.登录服务器 mysql -u <用户名> -p 2.增加用户,并同时授权操作权限 grant select,insert,update,delete on <数据库>.* ...
- 五分钟打造自己的sql性能分析工具
1.首先要有一个trace文件 2. 打开trace文件 3. 另存为跟踪表 4.登录你要保存到的目标sqlserver服务器 5. 选择要保存的数据库和表名称 6. 保存完成(左下角出现进度直到显示 ...