16进制的简单运算

描述现在给你一个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);}
}:

时间: 2024-10-25 07:09:37

16进制的简单运算的相关文章

NYOJ--244--16进制的简单运算(C++控制输入输出)

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

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

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

NYOJ-244-16进制的简单运算

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

C# Socket发送接收字节数组和十六16进制之间转换函数

近期在使用远程网络模块的时候, 需要用的Socket发送数据,远程模块指令为16进制. 官方提供的DEMO比较繁琐.不方便新手使用. 下面的转换函数可大大方便新手使用. // 16进制字符串转字节数组 格式为 string sendMessage = "00 01 00 00 00 06 FF 05 00 64 00 00"; private static byte[] HexStrTobyte(string hexString) { hexString = hexString.Rep

16进制转化为2进制 【位运算】

#include <stdio.h> int  main() {    int i,a; while (~scanf("%x", &a)){ for(i=15;i>=0;i--) printf("%1d", a&1<<i?1:0);  //注意优先级,先移位<<,结果再与a按位与 printf("\n"); }return 0; } 16进制转化为2进制 [位运算]

将网络流中用两个字节16进制表示的资源数(如DNS)和长度转换为整形

由于在网上搜索一直没有找到结果,而直接用指针强制转换的方法,却会导致高八位和第八位倒过来的错误,于是冥思苦想自己写了一个 思想大致如下: 用u_int16_t的2字节16位的整形变量来存储这个整数,首先将第一个字节和该变量进行或运算,运算结果左移八位,于是刚才的第一个字节结果就到了高八位,然后在与第二个字节进行或运算尽可以了代码如下: u_int16_t convert16(u_char *p) { u_int16_t tmp = 0; tmp |= p[0]; tmp <<= 8; tmp

详解2进制,10进制,16进制,8进制,36进制

本篇介绍C/C++语言中的进制的概念,主要介绍2进制.10进制.16进制,这三种是编程时必须掌握的也是最经常使用的.另外,介绍8进制和36进制,当中 36进制在实际project项目中会遇到. (本文选自<C/C++学习指南>.邵发.附录"2进制,10进制,16进制") 讲2进制.10进制.16进制的视频教程,点击观看 权利声明:作者拥有本书的所有权利. 作者授权不论什么人都能够自由转载本站点公布的内容,但转载时必须遵守下面限制: ①转载时必须全文转载.不得有不论什么改动,

详细解释2进制,10进制,16进制,8进制,36进制

本篇介绍C/C++语言中的进制的概念,主要介绍2进制.10进制.16进制,这三种是编程时必须掌握的也是最常用的.另外,介绍8进制和36进制,其中 36进制在实际工程项目中会遇到. (本文选自<C/C++学习指南>,邵发,附录"2进制,10进制,16进制") 权利声明:作者拥有本书的全部权利.作者授权任何人都可以自由转载本网站发布的内容,但转载时必须遵守以下限制: ①转载时必须全文转载,不得有任何修改,必须包含"权利声明"和"官网地址"

浮点数转16进制

IEEE规定浮点编码 float 1符号 8指数           23数据位 S        EEEEEEEE    DDDDDDDDDDDDDDDDDDDDDDD double 1符号 11指数           52数据位 S     EEEEEEEEEEE    DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 58.25 先处理整数部分58,整数部分取余直到商0,逆序排列 58 % 2    商 29  余 0 29 % 2