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

 
C语言差点写炸了,/(ㄒoㄒ)/~~,还是基本功不牢。
熟悉一下java,要注意的是:把每一位的权值计算出来,是 d[i] = d[i-1]*i;
把String 转成大整数,相加减得到结果,再返回去,去掉前导零。怎么得到数字,只要除以权值d[i];
//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的更多相关文章

  1. 【笔记】Unix 平台标准

    POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEE ...

  2. 我眼中的Linux设备树(六 memory&chosen节点)

    六 memory&chosen节点根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点.memory节点用来描述硬件内存布局的.如果有多块内存,既可以通过多个memor ...

  3. Linux设备树(六 memory&chosen节点)

    六 memory&chosen节点 根节点那一节我们说过,最简单的设备树也必须包含cpus节点和memory节点.memory节点用来描述硬件内存布局的.如果有多块内存,既可以通过多个memo ...

  4. Linux就这个范儿 第19章 团结就是力量 LSB是Linux标准化基地(Linux Standards Base)的简称

    Linux就这个范儿 第19章 团结就是力量  LSB是Linux标准化基地(Linux Standards Base)的简称 这个图片好可爱,它是LSB组织的图标.你肯定会问:“图标这么设计一定有说 ...

  5. 1003: [ZJOI2006]物流运输 最短路+dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1003 数据范围很小,怎么瞎搞都行,n方dp,然后跑出最短路暴力转移,需要注意的是不能使用的可能有多 ...

  6. 小白解决CENTOS7错误:Cannot find a valid baseurl for repo: base/7/x86_6

    刚入手的MacBook想着学点东西,本汪还是决定玩玩CentOS服务器,安装好了VirtualBox + CentOS. 打开一看,懵逼了!命令行! 行吧,先装个图形界面: $sudo yum gro ...

  7. 分布式系列文章——从ACID到CAP/BASE

    事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...

  8. base的应用

    ------------父类   public class Person   {       public Person(string name,int age)    {       this.Na ...

  9. C# base 64图片编码解码

    使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...

随机推荐

  1. 转:python webdriver API 之下载文件

    webdriver 允许我们设置默认的文件下载路径.也就是说文件会自动下载并且存在设置的那个目录中.要想下载文件,首选要先确定你所要下载的文件的类型.要识别自动文件的下载类型可以使用 curl ,如图 ...

  2. .NET: C#: Datetime

    比较简单的类,一般用到它的属性.经常会用到的是DateTime.Now和DateTime.Now.TimeOfDay; using System; using System.Collections.G ...

  3. java中的Robot

    项目中最近遇到了一个棘手问题,无法用WebDriver去操作win弹出窗口,经过多番查找,发现了Robot这个奇葩东东,Robot可以模拟鼠标和键盘操作, robot可以实现本地系统输入空包括win弹 ...

  4. Java用native2ascii命令做unicode编码转换

    背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...

  5. 12---Net基础加强

    使用ShowDialog窗体之间的回传值: using System; using System.Collections.Generic; using System.ComponentModel; u ...

  6. logging

    #coding=utf8 import sys, logging   logging.basicConfig(level=logging.INFO,                     forma ...

  7. 对linux的根目录执行强制递归移除

    开始开始时使用: #rm -f -r / 提示对根目录使用递归操作很危险,然后就没执行成功,让使用 --no-preserve-root 这个参数. 好吧,反正是虚拟机 于是执行: #rm -f -r ...

  8. 开启xp_cmdshell

    --打开xp_cmdshell EXEC sp_configure 'show advanced options', 1GORECONFIGUREGOEXEC sp_configure 'xp_cmd ...

  9. socket的简单通信

    ///客户端 package com.ch.day11_myclient; import java.io.BufferedReader;import java.io.IOException;impor ...

  10. js 点击按钮显示下拉菜单

    <li> <a id = "rank" onclick="showGroup()"></a></li><l ...