描述现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果。
- 输入
- 第一行输入一个正整数T(0<T<100000)
接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位 - 输出
- 每个表达式输出占一行,输出表达式8进制的结果。
- 样例输入
-
3
29+4823
18be+6784
4ae1-3d6c - 样例输出44114
-
100102 6565分析:可以看出来这是一个考察C语言基础的体型,静下心来应该不会有问题,做出来可能要花一点时间。参考答案:
#include<stdio.h>
#include<math.h>
char Y(char c)//函数一,用来吧字符变成数字
{
if(c>=48&&c<=57)
return(c-48);
else return(c-87);
}
int B(int m)//函数二,吧十进制转化为八进制
{
int y,i,k,a[500],j;
for(i=0; ;i++){
a[i]=m%8;
k=m/8;if(k==0)break;
m=k;}
for(j=i ;j>=0;j--)
printf("%d",a[j]);
putchar(‘\n‘);
}
main()
{
int i,j,k,m,n,a,b,c,w,c3;
char st[100],st1[31],st2[31],f;
scanf("%d",&n);getchar();
for(c3=0;c3<n;c3++){
gets(st);
for(i=0; st[i]!=‘+‘&&st[i]!=‘-‘;i++);
a=i;
for(j=a+1; st[j]!=‘\0‘;j++);
b=j;
for(k=0; k<a;k++)
st1[k]=st[k];
j=0;f=st[k];w=k;
for(k=k+1; k<b; k++){st2[j]=st[k];j++;}
int s1=0,s2=0,s,p;
for(i=0; st1[i]!=‘\0‘; i++)
{
p=pow(16,w-1);s1+=Y(st1[i])*p;w--;//pow函数包含在头文件“math"里,用来求平方
}
for(i=0; st2[i]!=‘\0‘; i++)
{
p=pow(16,j-1);s2+=Y(st2[i])*p;j--;
}
if(f==‘+‘)
s=s1+s2;else s=s1-s2;
B(s);}
}: