CSUFT 1003 All Your Base
Posted 树的种子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
CSUFT 1004 This is Halloween: Saving Money
Back up all of your mysql databases nightly
Microsoft Azure Tutorial: Build your first movie inventory web app with just a few lines of code(示例代