2020 HDU校赛 Problem I

Posted hhlya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020 HDU校赛 Problem I相关的知识,希望对你有一定的参考价值。

题面

Problem Description
在计算机中,对于定点数有三种不同的表示方法。在本题中,假定码的长度固定为8位,从左往右依次编号为第1到8位,第1位为最高位。

x的原码:最高位为符号位,正数符号位为0,负数符号位为1,第2到7位为x的二进制表示。正负0的原码不同。

x的反码:原码符号位除外,其他位按位取反,即1变0,0变1。

x的补码:正数的补码等于原码,负数的补码等于反码+1,因此正负0的补码相同。

给定整数x,请给出它的原码、反码和补码。

Input
第一行包含一个正整数T(1≤T≤300),表示测试数据的组数。

每组测试数据包含一行,首先是一个符号"+‘‘或"-‘‘,表示x的正负,然后是一个非负整数y(0≤y≤100),表示x的绝对值为y。

Output
对于每组数据,输出三行,第一行为原码,第二行为反码,第三行为补码。

Sample Input
4
+0
+1
-0
-3

Sample Output
00000000
01111111
00000000
00000001
01111110
00000001
10000000
11111111
00000000
10000011
11111100
11111101

思路

码制的转换,根据二进制转换成相对于的编码就可以了。

代码实现(比赛的时候写的,有点乱,将就看)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
int main () {
    int t;
    cin>>t;
    while (t--) {
    int num,temp;
    char zf;
    int s[8];
    cin>>zf;
    cin>>num;
    int ans=num;
    memset (s,0,sizeof (s));
    int its=0;
   while(num!=0)  {
     temp=num%2;
     s[its]=temp;              
     its++;
     num/=2;
}
   if (zf==‘-‘) cout<<1;
   if (zf==‘+‘) cout<<0;
   if (ans!=0)for(int j=6;j>=0;j--) {           //算出原码
    cout<<s[j];
}
   else if (ans==0) {
       for (int i=6;i>=0;i--) {
           s[i]=0;
           cout<<s[i];
       }
   }
   cout<<endl;
   int k[8];
   if (zf==‘-‘) cout<<1;
   if (zf==‘+‘) cout<<0;
   for (int j=6;j>=0;j--) {
      if (s[j]==0) k[j]=1;      //反码处理
      else k[j]=0;
      cout<<k[j];
   }
   cout<<endl;
   if (zf==‘+‘) {
      cout<<0;
      for (int i=6;i>=0;i--) cout<<s[i];
      cout<<endl;
   }
   else if (ans==0) cout<<"00000000"<<endl;
   else {
    if (zf==‘-‘) cout<<1;
   if (zf==‘+‘) cout<<0;
   for (int i=0;i<=6;i++) {
       if (k[i]==0) {
           k[i]=1;
           break;
       }
       if (k[i]==1) k[i]=0;
   }
   for (int i=6;i>=0;i--) cout<<k[i];
   cout<<endl;
   
}
    }
    return 0;
}




















以上是关于2020 HDU校赛 Problem I的主要内容,如果未能解决你的问题,请参考以下文章

HDU校赛 | 2019 Multi-University Training Contest 3

2020武大校赛预赛C题

2019杭电多校赛第四场 HDU6621 K-th Closest Distance 主席树 二分

2016 华科校赛 B. And

ACM之行◇第一站◇ 2018HDU多校赛总结

杂题总汇HDU多校赛第十场 Videos