ZOJ.3437 Very Hard Problem【strtoll函数】 2015/09/23

Very Hard Problem

Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge

It was in the ancient world. ZOJ, the greatest treasure hunter in the world has been lost in the forest for more than 100 hours. Being with no food and no water for such a long time, he was really exhausted this night.

He then took out an old map, which was a very strange map. There are many stared positions on the map and it seems those stars are connected by some roads. "I'm sure the treasure is near me, but where is it?", said ZOJ, "If I can't find it, I will be laughed by others."

Suddenly, ZOJ noticed a slight light. "It was unsual.", said ZOJ and he started looking for the treasure again. After three hours' search, he finally found an entrance. But to enter the entrance, a puzzle should be solved.

The puzzle was described like this. Every time, you were given a character in the set {'-', '!', '~'} and a b-based number. You should take the character as an operator (i.e. '-' changes a number to its opposite number, '!' changes zero to one and non-zero value to zero, '~' takes bitwise operation NOT on all 64 bits of a number) and operates on the number. All you need to do is to print out the result.

The puzzle seemed quite simple, but ZOJ was only good at working out the output of the programs written by others, and had no idea about how to solve such a problem. So he turned to you for help.

Input

There are multiple test cases. In each test case, a character ch, a number b and a number n in b-based (2 ≤ b ≤ 16, when b is no less than 10, 'a'..'f' or 'A'..'F' are used) are given in order in one line. ch is assured to be in the set {'-', '!', '~'}, the number (n)b is assured in the range of a signed 64-bit integer. ch, b, n are seperated by one or more spaces. Leading or trailing spaces may also be added to the lines.

Output

For each test case, print one line, the 10-based result.

Sample Input
  ~  10    4
! 10 0
-  16  -F
Sample Output
-5
1
15

Author: ZHUANG, Junyuan
Contest: Let's Celebrate the 100th Contest on ZOJ!
strtoll函数,将字符型转化成对应进制的数值型。取-时,注意越界

#include<iostream>
#include<cstdio>
#include<string.h>
#include<cmath>
#include<limits.h>
#include<stdlib.h>

using namespace std;

int main(){
    char str[10],temp[110];
    int b;
    while( ~scanf("%s%d%s",str,&b,temp) ){
        long long n = strtoll(temp,NULL,b);
        if( str[0] == '~' )
            printf("%lld\n",~n);
        else if( str[0] == '!' )
            printf("%d\n",!n);
        else{
            if( n == LLONG_MIN )
                printf("%llu\n",(long long unsigned)n);
            else printf("%lld\n",-n);
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值