输入有多行。
每行包括两个正整数n和R,其中2≤R≤16。
输入直到文件结束为止。
对于每个用例,输出n对应的R进制形式。
超过10进制的数,10用A表示、11用B表示,依次类推。
1989 2<br/>1119 16
11111000101<br/>45F
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string fun(int n,int m){
string ret;
int t;
while(n!=0){
t=n%m;
n/=m;
if(t<10) ret+=(t+'0');
else ret+=(t-10+'A');
}
reverse(ret.begin(),ret.end());
return ret;
}
int main(){
int n,m;
while(cin>>n>>m){
cout<<fun(n,m)<<endl;
}
return 0;
}
import sys
#这个函数的作用是将一个十进制数转为N进制的数。
def baseN(num, b):
return ((num == 0) and "0") or (baseN(num // b, b).lstrip("0") + "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"[num % b])
for i in sys.stdin.readlines():
num, b = map(int, i.split())
print(baseN(num, b))
#include<iostream>
using namespace std;
int main(int argc, char** argv){
char data[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int n,r;
while(cin >> n >> r){
string res="";
while(n>0){ res = data[n%r]+res; n/=r; }
cout << res << endl;
}
return 0;
} #include <iostream>
#include <stack>
using namespace std;
char trans[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
void one(long long n, int r)
{
int temp = 0, ans = 0;
stack<int> sta;
while (n != 0)
{
temp = n % r;
sta.push(temp);
n = n / r;
}
while (!sta.empty())
{
temp = sta.top();
sta.pop();
cout << trans[temp];
}
cout << endl;
}
int main()
{
long long n = 0;
int r = 0;
while (cin >> n >> r)
{
one(n, r);
}
return 0;
} 直接用BigInteger类转化进制,然后化成大写字母
#include<iostream>
#include<cmath>
int main()
{
using namespace std;
int n,R;
while (cin >> n >> R)
{
int max_exp = 0;
while (n / (int)pow(R, max_exp))
++max_exp;
if (max_exp > 0) --max_exp;
do
{
switch (n / (int)pow(R, max_exp))
{
case 10 : cout << "A";break;
case 11 : cout << "B";break;
case 12 : cout << "C";break;
case 13 : cout << "D";break;
case 14 : cout << "E";break;
case 15 : cout << "F";break;
default : cout << n / (int)pow(R, max_exp);break;
}
n = n % (int)pow(R, max_exp);
--max_exp;
} while (max_exp >= 0);
cout << endl;
}
return 0;
}
又是水题一道。。。
模拟手动进制转换即可,不过注意超过10需要用大写字母A、B、C等来表示。
#include <iostream>
(720)#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
int n = 0, r = 0;
//scanf返回值为正确输入数据的变量个数,当一个变量都没有成功获取数据时,此时返回-1
while (scanf("%d %d", &n, &r) != - 1) {
string resStr = "";
//只要n >= r,则说明还需要进位转换
while (n != 0) {
char ch = n % r;
//转换为响应的数字字符
if (ch > 9) {
ch += 'A' - 10;
} else {
ch += '0';
}
//逆序拼接,因为我们是从低到高位进行转换
resStr = ch + resStr;
n /= r;
}
//如果最后剩下了,则进制转换后最高位为1
printf("%s\n", resStr.c_str());
}
return 0;
}
————————————————
版权声明:本文为CSDN博主「hestyle」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://hestyle.blog.csdn.net/article/details/104660206
#include <stdio.h>
#include <stdlib.h>
char jz[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
void reverse(int*, int);//翻转
void exchange(char*, int*, int);//数字变字符
int main()
{
int n, r;
while(~scanf("%d %d", &n, &r))
{
char result[100] = {0};
int temp[100] = {0};
int i = 0;
while(n)
{
temp[i] = n % r;
n = n/r;
i++;
}//i = length(temp)
//int result1[100] = {0};
reverse(temp, i);
exchange(result, temp, i);
printf("%s\n", result);
}
}
void reverse(int a[], int n)
{
for(int i = 0; i < n/2; i++)
{
int temp = a[n - i - 1];
a[n - i - 1] = a[i];
a[i] = temp;
}
}
void exchange(char s[], int a[], int n)
{
for(int i = 0; i < n; i++)
s[i] = jz[a[i]];
} #include<stdio.h>
int main(){
int n,r,i = 0,j;
int arr[100],num;
while(scanf("%d%d",&n,&r)!=EOF){
i = 0;
while(n>=r){
arr[i] = n%r;
n = n/r;
i++;
}
arr[i] = n;
for(j = i;j>=0;j--){
if(arr[j]<10)
{
printf("%d",arr[j]);
}
else if(arr[j]==10){
printf("A");
}
else if(arr[j]==11){
printf("B");
}
else if(arr[j]==12){
printf("C");
} else if(arr[j]==13){
printf("D");
}
else if(arr[j]==14){
printf("E");
}
else if(arr[j]==15){
printf("F");
}
}
printf("\n");
}
return 0;
} #include<bits/stdc++.h>
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<stack>
using namespace std;//进制转化问题
int main()
{
char trans[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int num,R;
while(cin>>num>>R)
{
stack<int> s;
while(1)
{
int num1;
num1=num%R;
s.push(num1);
num/=R;
if(num<R)
{
s.push(num);
break;
}
}
while(!s.empty())
{
int temp=s.top();
cout<<trans[temp];
s.pop();
}
}
return 0;
} 思路:上一题基本没有改动就能用。
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main()
{
int n, r;
int i = 0;
char ascii[] = { 'A','B','C','D','E','F' };
vector<int> out;
while (cin >> n >> r)
{
i = 0;
while (n)
{
i++;
int tempR = pow(r, i);
int temp = n - (n / tempR)*tempR;
out.push_back(temp / (pow(r, i - 1)));
n = n - temp;
//cout << temp / (pow(r, i - 1) )<< endl;
}
int count = 0;
for (int j = 0; j < out.size(); j++)
{
if (out[j] == 1)
{
count++;
}
if (out[out.size() - j - 1] >= 10)
{
cout << ascii[out[out.size() - j - 1] - 10];
}
else
cout << out[out.size() - j - 1];
if (j == out.size() - 1)
{
cout << endl;
}
}
out.clear();
//cout << count << endl;
}
}
#include <cstdio>
int main(){
int n,r;
while(scanf("%d%d",&n,&r)==2){
char a[40],num=0;
do{
int x=n%r;
a[num++]=x<10?x+'0':x-10+'A';
n/=r;
}while(n);
for(int i=num-1;i>=0;i--) printf("%c",a[i]);
printf("\n");
}
return 0;
} 代码是第一名,看来还是简短的代码效率比较高,以后追求代码的最优化。这题很常规,典型的进制转换题目,考研机试就有啊!
//简单清晰明了才是最重要的#include <stdio.h>int Switch(int n, int r, int *a);int main(){int n;int r;int i;int a[10000];while(scanf("%d %d", &n, &r)!=EOF){int len = Switch(n, r, a);for(i=len-1;i>=0;i--){if(a[i]<10){printf("%d", a[i]);}else{printf("%c", a[i]);}}printf("\n");}return0;}int Switch(int n, int r, int *a){int i=0;int tmp;while(n!=0){tmp = n % r;if(tmp>9){switch(tmp){case10:a[i] = (int)'A';break;case11:a[i] = (int)'B';break;case12:a[i] = (int)'C';break;case13:a[i] = (int)'D';break;case14:a[i] = (int)'E';break;case15:a[i] = (int)'F';break;}}else{a[i] = tmp;}i++;n /= r;}return i;}
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
int main(){
int n, R;
char out_d = 'A';
vector<int> v;
while(scanf("%d %d", &n, &R)!=EOF){
v.clear();
while(n!=0){
v.push_back(n % R);
n = n / R;
}
for(auto iter = v.crbegin();iter!=v.crend();iter++){
if(*iter >= 10)
printf("%c", out_d + (*iter - 10));
else
cout << *iter;
}
cout << endl;
}
return 0;
}