题目244-16进制的简单运算

来源:互联网 发布:caddy windows 编辑:程序博客网 时间:2024/05/18 01:29

16进制的简单运算

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果。
输入
第一行输入一个正整数T(0<T<100000)
接下来有T行,每行输入一个字符串s(长度小于15)字符串中有两个数和一个加号或者一个减号,且表达式合法并且所有运算的数都小于31位
输出
每个表达式输出占一行,输出表达式8进制的结果。
样例输入
329+482318be+67844ae1-3d6c
样例输出
441141001026565


//代码:

[html] view plain copy
 print?
  1. #include<stdio.h>   
  2. int main(){  
  3.     int T,x,y;  
  4.     char ch;  
  5.     scanf("%d",&T);  
  6.     while(T--){  
  7.         scanf("%x%c%x",&x,&ch,&y);  
  8.         if(ch=='+')  
  9.         printf("%o\n",x+y);  
  10.         else  
  11.         printf("%o\n",x-y);  
  12.     }  
  13.     return 0;  
  14. }  

//最开始把问题想复杂了,用字符串数组模拟的,忘记用数据的基本格式类型就可以转化!!!!C语言的基本知识还是需要强化!!!!


格式说明由“%”和格式字符组成,如%d%f等。它的作用是将输出的数据转换为指定的格式输出。格式说明总是由“%”字符开始的。不同类型的数据用不同的格式字符。 
格式字符有d,o,x,u,c,s,f,e,g等。 

%d整型输出,%ld长整型输出,

%o以八进制数形式输出整数,

%x以十六进制数形式输出整数,

%u以十进制数输出unsigned型数据(无符号数)。

%c用来输出一个字符,

%s用来输出一个字符串,

%f用来输出实数,以小数形式输出,

%e以指数形式输出实数,

%g根据大小自动选f格式或e格式,且不输出无意义的零。

scanf(控制字符,地址列表) 
格式字符的含义同printf函数,地址列表是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。如scanf("%d%c%s",&a,&b,str);



另外一种做法,可以顺便学习C++的输入输出


       #include<iostream>#include<iomanip>#include<cstdio>using namespace std;int main(){    ios::sync_with_stdio(false);    int t;cin>>t;    while(t--) {         int x,y;        char op;        cin>>hex>>x>>op>>y;        if(op == '+')cout<<setbase(8)<<(x+y)<<endl;        else cout<<setbase(8)<<(x-y)<<endl;    }    return 0;}            


setbase(int n) : 将数字转换为 n 进制.
   如 cout<<setbase(8)<<setw(5)<<255<<endl;
    cout<<setbase(10)<<setw(5)<<255<<endl;
    cout<<setbase(16)<<255<<endl;
   结果是:
   (空格)(空格)377
   (空格)(空格) 255
   (空格)(空格) ff


hex 是16进制,oct是8进制,dec是10进制



原创粉丝点击