nyoj244 16进制的简单运算
2015-07-17 12:09
260 查看
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
注:此题为:南阳oj 题目244 16进制的简单运算
说明:字符串的处理和进制转换
已AC源代码:
#include<stdio.h>
#include<string.h>
int num8[50]; //八进制
int yjj(char ch)
{
int s;
if(ch>='0'&&ch<='9')
s=ch-'0';
else
s=(int)ch-87;
return s;
}
int y_16_10(char ch[],int len) //十六进制变为十进制
{
int i,n,m=0,k=1; //初值
for(i=len-1;i>=0;--i)
{
n=yjj(ch[i]);
m+=(n*k);
k*=16;
}
return m;
}
int y_10_8(int x) //十进制变为八进制 存放在num8[]中
{
int lengh=0;
while(x)
{
num8[lengh++]=x%8;
x/=8;
}
return lengh;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char ch[50],ch1[25],ch2[25],c;
int a,b,len,i,j,x,y,k=0;
scanf("%s",ch);
len=strlen(ch);
for(i=0;;i++)
{
if(ch[i]=='+'||ch[i]=='-')
{
c=ch[i]; //运算符用 c 表示
ch1[k]='\0'; //字符串结束标志 '\0'
i++;
break;
}
else
ch1[k++]=ch[i]; //运算符前的字符放在 ch1中
}
k=0;
for(i;i<len;++i) //运算符后的字符放在 ch2中
ch2[k++]=ch[i];
ch2[k]='\0'; //字符串结束标志 '\0'
len=strlen(ch1);
a=y_16_10(ch1,len); //符号前的数
len=strlen(ch2);
b=y_16_10(ch2,len); //符号后的数
switch(c)
{
case '+':
x=a+b; break;
case '-':
x=a-b; break;
}
len=y_10_8(x); //十进制变为八进制
for(i=len-1;i>=0;--i)
printf("%d",num8[i]);
printf("\n");
}
return 0;
}
相关文章推荐
- 南阳oj 第15题 括号匹配(二)
- 南阳 27 水池数目(递归)
- 南阳 37
- 南阳oj 36 最长公共子序列
- NYOJ 84 阶乘的0
- 南阳oj 题目22 素数求和问题
- 南阳oj 题目1 A+B Problem
- 南阳oj 题目4 ASCII码排序
- 南阳oj 题目11 奇偶数分离
- 南阳oj 题目13 Fibonacci数
- 南阳oj 题目24 素数距离问题
- 南阳oj 题目40 公约数和公倍数
- 南阳oj 题目29 求转置矩阵问题
- 南阳oj 题目31 5个数求最值
- 南阳oj 题目34 韩信点兵
- 南阳oj 题目39 水仙花数
- 南阳oj 题目41 三个数从小到大排序
- 南阳oj 题目57 6174问题
- 南阳oj 题目60 谁获得了最高奖学金
- 南阳oj 题目25 A Famous Music Composer