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 ...
随机推荐
- TIJ——Chapter Two:Everything Is an Object
If we spoke a different language, we would perceive a somewhat different world. Ludwig Wittgenstein( ...
- Swift实战-豆瓣电台(八)播放进度与时间
视频观看地址:http://www.tudou.com/programs/view/4mEtz8S72k0/?resourceId=399000367_06_02_99 这节主要内容是NSTimer, ...
- codeforces343A A. Rational Resistance
http://http://codeforces.com/problemset/problem/343/A A. Rational Resistance time limit per test 1 s ...
- csuoj 1112: 机器人的指令
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1112 1112: 机器人的指令 Time Limit: 1 Sec Memory Limit: ...
- ruby的在ubuntu上的安装
apt (Debian or Ubuntu) Debian GNU/Linux and Ubuntu use the apt package manager. You can use it like ...
- so baby come on~~
http://www.cnblogs.com/mfryf/archive/2013/05/17/3083895.html
- Android使用ZXing生成带图片的二维码
效果图如下: 制作过程很简单的就是在原始的二维码图片上添加一个logn图标,代码的注释写得很详细,也就不给大家啰嗦了 package com.example.day44_02_qrcodewithlo ...
- 利用API自动建立GL科目段组合
1.检查存在性,如没有则新增 fnd_flex_keyval.validate_segs('CREATE_COMBINATION' ...
- Delphi中SQL批量插入记录
http://www.cnblogs.com/azhqiang/p/4050331.html 在进行数据库操作时, 我们经常会遇到批量向数据库中写入记录的情况. 在这里我提供3种操作方式: 1. ...
- c 指针(一)
一:什么是指针 变量i 的存储地址为P(假设为2000),*P 为指针变量 一个变量的地址称为该变量的“指针”.如果有另一个变量专门存放另一变量的地址(指针),则它称为“指针变量”. 指针是一个地 ...