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;
}