题目描述:
求任意两个不同进制非负整数的转换(2 进制 ~ 16 进制),所给整数在 long 所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入描述:
每组输入占一行,包含用空格分开的三个整数 a, n, b
a 表示其后的 n 是 a 进制整数
b 表示欲将 a 进制整数 n 转换成 b 进制整数。
a, b是十进制整数,2 <= a, b <= 16。
输出描述:
每组输入输出一行,为转换后的 b 进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
样例输入:
8 376 12
15 Aab3 7
样例输出:
192
210306
先转换为10进制,再转换为其他
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int a,b; 5 string n; 6 while(cin>>a>>n>>b){ 7 int len,i,m; 8 len=n.length(); 9 int nn[len]; 10 int s=0,c=1,k=0; 11 char ns[50]; 12 for(i=len-1;i>=0;i--){ 13 if(n[i]>='0'&&n[i]<='9'){ 14 nn[i]=n[i]-'0'; 15 } 16 else if(n[i]>='a'&&n[i]<='z'){ 17 nn[i]=n[i]-'a'+10; 18 } 19 else if(n[i]>='A'&&n[i]<='Z'){ 20 nn[i]=n[i]-'A'+10; 21 } 22 s=s+nn[i]*c; 23 c=c*a; 24 //cout<<nn[i]<<endl; 25 } 26 //cout<<s<<endl; 27 do{ 28 m=s%b; 29 if(m<10){ 30 m=m+'0'; 31 } 32 else{ 33 m=m-10+'A'; 34 } 35 ns[k++]=m; 36 s=s/b; 37 }while(s!=0); 38 for(i=k-1;i>=0;i--){ 39 cout<<ns[i]; 40 } 41 cout<<endl; 42 } 43 return 0; 44 }
题目描述:
输入一个数 n(n < 10),接下来有 n 行,每行给出一个十进制数 m,将 m 由十进制转换成 17 进制(超过 9 的数分别用大写字母 A - G 表示)并输出。数据范围:m < 30000。
输入描述:
第一行为一个数 n,接下来为 n 行,每行一个十进制数。
输出描述:
输出 n 行,每行一个 17 进制数。
样例输入:
2
16
17
样例输出:
G
10
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n,i,s,k,j; 5 char p; 6 cin>>n; 7 int m[n]; 8 char c[50]; 9 for(i=0;i<n;i++){ 10 cin>>m[i]; 11 } 12 for(i=0;i<n;i++){ 13 k=0; 14 do{ 15 s=m[i]%17; 16 if(s<10){ 17 //cout<<s; 18 s=s+'0'; 19 c[k++]=s; 20 } 21 else{ 22 p=s-10+'A'; 23 //cout<<p; 24 c[k++]=p; 25 } 26 m[i]=m[i]/17; 27 }while(m[i]!=0); 28 for(j=k-1;j>=0;j--){ 29 cout<<c[j]; 30 } 31 cout<<endl; 32 } 33 return 0; 34 }