您的位置:首页 > 其它

南阳oj-244-16进制的简单运算

2015-03-08 10:49 211 查看

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

本想拿这道题练一下进制转换的,看完最优代码才知道c语言有直接的十六进制,八进制占位符
我的代码


#include <iostream>
#include <cstdio>

using namespace std;

int hd(char c)
{
if(c >= 'a')
return c-'a'+10;
else
return c-'0';
}
int main()
{
int n;
char c;
scanf("%d",&n);
getchar();
while(n--)
{
int a = 0, b = 0, d = 0,sign = -1;

while(1)
{                  //a进制转10进制的核心就是d=x*a^n+y*a^n-1+………………+z*a^0
scanf("%c",&c);
if(c == '+' || c =='-')
break;
a = a*16 + hd(c);
}
if(c == '+')
sign = 1;
else
sign = 0;
while(1)
{
scanf("%c",&c);
if(c == '\n')
break;
b = b*16 + hd(c);
}
if(sign) d = a + b;
else d = a - b;
printf("%o\n",d);
}

}


最优代码:

01.#include<stdio.h>
02.int main()
03.{
04.int T;
05.scanf("%d",&T);
06.while(T--)
07.{
08.int a,b,d;
09.char c;
10.scanf("%x%c%x",&a,&c,&b);
11.if(c=='+') d=a+b;
12.else d=a-b;
13.if(d>=0)
14.printf("%o\n",d);
15.else printf("-%o\n",-d);
16.}
17.}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: