c++进制问题
编写程序:输入2个字符,分别在'1'-'9'和'A'-'F'之间,把这两个字符看作1个二位16进制整数的2个数位。输出这个数的10进制形式和16进制形式。运行程序,观察输入的字符和输出的16进制是否一致。
2020-03-09 11:08
2020-03-09 14:09
2020-03-09 14:34
程序代码:#include <iostream>
#include <iomanip>
#include <optional>
using namespace std;
std::optional<unsigned> h2u( char ch )
{
if( ch < '0' )
return {};
if( ch <= '9' )
return ch-'0';
if( ch < 'A' )
return {};
if( ch <= 'F' )
return ch-'A'+10;
return {};
}
int main( void )
{
char a,b;
if( !(cin>>a>>b) )
return 1;
auto vh = h2u(a);
auto vl = h2u(b);
if( !vh.has_value() || !vl.has_value() )
return 2;
auto value = vh.value()*16 + vl.value();
cout << value << '\t'
<< setfill('0') << setw(2) << setiosflags(ios::uppercase) << hex << value << endl;
}
2020-03-09 16:51
程序代码:
#include<iostream>
using namespace std;
int main(){
int i=0,n,a[100];
cin>>n;
while(n!=0){
a[i]=n%2;
i++;
n/=2;
}
for(int j=i-1;j>=0;j--){
cout<<a[j];
}
return 0;
}

2020-03-09 19:12
程序代码:
#include<iostream>
using namespace std;
int main(){
int i=0,n,m=16,a[100];
cin>>n;
while(n!=0){
a[i]=n%m;
n/=m;
i++;
}
for(int j=i-1;j>=0;j--){
if(a[j]>=10)
cout<<(char)(a[j]-10+'A');
else
cout<<a[j];
}
return 0;
}

2020-03-09 19:17

2020-03-09 19:44
2020-03-09 19:48
2020-03-09 23:22
程序代码:
这个问题想的我头都快要炸了
#include<iostream>
#include<string>
#include<bitset>
using namespace std;
int main()
//两个字符,输出10进制16进制
//字符转十进制-55,
//一位数字输出ch,一位字符输出10进制-55
//数字加字符=2+,数字变2进制,左移4位字符变2进制加数字2进制
//转换10进制(不可行)
//
{string a;cin>>a;int count{};int tem{};
int shi[2];int fg{};int i{};int bin1{};
for(i=0;a[i];++i)
{ if(a[i]>='0'&&a[i]<='9')
{++count;}
else if(a[i]>='A' && a[i]<='Z')
{++tem;}
}
fg=count+tem;//输入字符数字和字母的位数
//cout<<fg;
if((fg==1)&&(a[0]>='0'&&a[0]<='9'))
{cout<<a[0];cout<<endl;cout<<"十六进制"<<a;//一位且是数字打印字符
}
else if((fg==1)&&(a[0]>='A' && a[0]<='Z'))
{ cout<<static_cast<int>(a[0])-55;
cout<<endl;
cout<<"十六进制"<<a;//一位且是字母打印字字母二进制
}
else
{//2位的情况
if(tem==1){int x= static_cast<int>(a[0])-48;
int y= static_cast<int>(a[1])-55;
cout<<x*16+y;
cout<<endl;//字母有一个,第一个减48减55数字字母变10进制,推导出十六进制总是a【0】*16+a[1]
cout<<"十六进制"<<a;}
if(tem==2)
//字母2位的情况同上
{int x= static_cast<int>(a[0])-55;
int y= static_cast<int>(a[1])-55;
cout<<x*16+y;
cout<<endl;
cout<<"十六进制"<<a;}
}
}

2020-03-10 05:40