16进制的简单运算
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
-
现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果。
-
输入
- 第一行输入一个正整数T(0<T<100000)
接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 输出 - 每个表达式输出占一行,输出表达式8进制的结果。 样例输入
-
3 29+4823 18be+6784 4ae1-3d6c
样例输出 -
44114 100102 6565
- 第一行输入一个正整数T(0<T<100000)
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int N=input.nextInt();
while(N-->0){
String str=input.next();
char str1[]=str.toCharArray();
int str2[]=new int[33];
char c='0';
int e=0;
int j=0;
for(int i=0;i<str1.length;i++){
if(str1[i]>='0'&&str1[i]<='9')
str2[e++]=str1[i]-'0';
else if(str1[i]>='a'&&str1[i]<='z'){
str2[e++]=str1[i]-'a'+10;
}
else{
c=str1[i];
j=e;
}
}
int a=0,b=0;
for(int i=0;i<j;i++)
a=a*16+str2[i];
for(int i=j;i<e;i++)
b=b*16+str2[i];
// System.out.println(a);
// System.out.println(b);
if(c=='+')
a=a+b;
else
a=a-b;
e=0;
while(a!=0){
str2[e++]=a%8;
a/=8;
}
for(int i=e-1;i>=0;i--)
System.out.print(str2[i]);
System.out.println();
}
}
}