c++进制问题
编写程序:输入2个字符,分别在'1'-'9'和'A'-'F'之间,把这两个字符看作1个二位16进制整数的2个数位。输出这个数的10进制形式和16进制形式。运行程序,观察输入的字符和输出的16进制是否一致。
#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; }
这个问题想的我头都快要炸了 #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;} } }