用c++实现输入两个十六进制数相加或相减,输出其二进制数相加或相减,结果为十进制数

2024-11-21 01:06:28
推荐回答(2个)
回答1:

1、首先,定义一个整型数组,保存所有的整数。

2、定义一个自定义函数,判断两个数的大小。自定义函数中,如果两个整数不相同,则判断它们的大小。

3、主函数中,先定义两个整型变量,保存数值的个数和有无相同数值的判断。

4、输入数值的个数,保存在变量n中。输入所有的数值,保存在数组num中。

5、将数组中的所有数值按从小到大的顺序排列,如下图所示。

6、用for循环语句判断每个数值,是否有相同的数。如果一个数有相同的数值,则输出所有相同数,用while语句实现所有数的判断。

回答2:

#include
using namespace std;
int gethex(char *s) { int r=0;
  while ( *s ) {
    r*=16;
    if ( *s>='0' && *s<='9' ) r+=*s-'0';
    else if ( *s>='a' && *s<='f' ) r+=*s-'a'+10;
    else if ( *s>='A' && *s<='F' ) r+=*s-'A'+10;
    s++;
  }
  return r;
}
void main() { int i,b,bb,x,y,z; char str[80];
  while ( 1 ) {
    cin>>str;
    i=0; b=-1; 
    while ( str[i] ) { if ( str[i]=='+' || str[i]=='-' ) { b=i; break; } else i++; }
    if ( b>=0 ) {
      bb=( str[b]=='+' )?(0):(1); str[b]=0;
      x=gethex(str); y=gethex(str+b+1); z=x; z+=( bb )?(-y):(y);
      for ( i=0,b=0x1000;i<13;i++,b>>=1 ) cout<<(( x&b )?(1):(0));
      cout<<' '<<(( bb )?('-'):('+'))<<' ';
      for ( i=0,b=0x1000;i<13;i++,b>>=1 ) cout<<(( y&b )?(1):(0));
      cout<<" = "<    } else break;
  }
}