首页 > 试题广场 > 进制间转换
[编程题]进制间转换
  • 热度指数:4773 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
设计一个函数, 可以将任意十进制的数, 转换成任意2到9的进制表示的形式

输入描述:
需要转换的数字x(0<=x<=1e18) 转换使用的进制k(2<=k<=9)


输出描述:
对应进制的结果
示例1

输入

33 2

输出

100001
#include <bits/stdc++.h>
using namespace std;

int main(){
    long x;
    int k;
    cin>>x>>k;
    stack<int> s;
    if(x==0)
        cout<<0<<endl;
    else{
        while(x){
            s.push(x%k);
            x /= k;
        }
        while(!s.empty()){
            cout<<s.top();
            s.pop();
        }
        cout<<endl;
    }
    return 0;
}

发表于 2019-11-09 01:02:08 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long x = scanner.nextLong();
        long k = scanner.nextLong();
        System.out.println(radix(x, k));
    }

    private static String radix(long x, long k) {
        StringBuilder sb = new StringBuilder();
        if (x == 0) {
            sb.append(0);
        }
        while (x != 0) {
            sb.append(x % k);
            x /= k;
        }
        return sb.reverse().toString();
    }
}
发表于 2019-07-08 15:30:57 回复(0)
a,b = list(map(int,input().split())),''
while a[0]:
    a[0],b = a[0] // a[1],b + str(a[0] % a[1])
print(b[::-1] if b else 0)

发表于 2020-03-16 15:36:38 回复(0)
#include <bits/stdc++.h>
using namespace std;
string changeNum(long long num,long long x){
    if(num==0)
        return "0";
    stack<int> st;
    while(num>0){
        st.push(num%x);
        num/=x;
    }
    string str;
    while(!st.empty()){
        str+=st.top()+'0';
        st.pop();
    }
    return str;
}
int main(){
    long long n,x;
    cin>>n>>x;
    cout<<changeNum(n,x);
    return 0;
}

发表于 2019-10-23 15:53:36 回复(0)
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <string>
#include <list>
#include <math.h>
#include <set>
#include <cstdio>
#include <queue>
#include <sstream>
#include <stack>

//#define DBL_MAX 1.7976931348623158e+308

using namespace std;
typedef long long ll;
#define BIG 1000000000
//习惯性带上上面

void f(ll n, int x) {
    stack<int> sta;

    while (n != 0) {
        sta.push(n % x);
        n = n / x;
    }
    while (!sta.empty()) {
        cout << sta.top();
        sta.pop();
    }
    cout << endl;
}

int main() {
    ll n;
    int x;
    cin >> n >> x;
    if (n == 0) {
        cout << 0 << endl;
    } else{
        f(n, x);
    }
    return 0;
}


发表于 2019-10-04 21:10:59 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong(), radix = sc.nextLong();
        StringBuffer sb = new StringBuffer();
        if (n == 0) { sb.append(0); }
        while (n > 0) {
            sb.append( n % radix);
            n /= radix;
        }
        System.out.println(sb.reverse().toString());
        return;
    }
}

发表于 2019-09-10 17:53:20 回复(0)
""""
进制转换
"""

if __name__ == "__main__":
    x, k = map(int, input().strip().split())
    ans = []
    while x:
        ans.insert(0, x % k)
        x //= k
    if not ans:
        ans.append(0)
    print(''.join(map(str, ans)))

发表于 2019-07-13 13:11:11 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long x,k;
    cin>>x>>k;
    string res="";
    while(x>=k)
    {
        res.insert(res.begin(),x%k+'0');
        x/=k;
    }
    res.insert(res.begin(),x%k+'0');
    cout<<res<<endl;
    return 0;
}

发表于 2019-07-03 21:31:12 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main() {
	long long x;
    int k,q;
	cin >> x >> k;
	vector<int>m;
	do
	{
		int p;
		p = x%k;
		q = x / k;
		x /= k;
		m.push_back(p);
	} while (q!= 0);
	for(int i=m.size()-1;i>=0;i--)
		cout << m[i];
	cout << endl;
	return 0;
}

发表于 2020-03-26 19:51:49 回复(0)
#include <iostream>

using namespace std;

int main(int argc, const char **argv)
{
    unsigned int base;
    long number;
    string result = "";
    cin >> number >> base;
    do {
        // 不断以基数对原数取余,并将结果倒叙即对应进制数
        result = to_string(number % base) + result;
        number = number / base;
    } while(number);
    cout << result <<endl;
}
发表于 2020-03-14 12:05:49 回复(0)
qnk头像 qnk
#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
    long long int x,k;
    cin>>x>>k;
    stack<int> res;
    while(x)
    {
        res.push(x%k);
        x=x/k;
    }
    if(res.empty())
        cout<<0;
    
    while(!res.empty())
    {
        cout<<res.top();
        res.pop();
    }

    return 0;
}

发表于 2020-02-19 22:58:59 回复(0)
#include <bits/stdc++.h>
using namespace std;



int main(){
    string x;
    cin>>x;
    int k;
    cin>>k;
    int n = x.length();
    vector<int> v(n);
    for(int i=0;i<n;i++)
        v[i]=x[i]-'0';
    
    vector<int> ans;
    int t = 0;// 
    while(t!=n){//x!=0   0的位数!=n
        t=0;
        // x/k
        for(int i=0;i<n;i++){
            if(i!=n-1)
                v[i+1]+=(v[i]%k)*10;
            else{
                ans.push_back(v[i]%k);//x%k
            }
            v[i]/=k;
            if(v[i]==0){
                t++;
            }
        }
    }
    for(int i=0;i<ans.size();i++){
        cout<<ans[ans.size()-i-1];
    }
    cout<<endl;
    
    return 0;
}

发表于 2020-02-17 21:34:26 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            long x = sc.nextLong();
            int k = sc.nextInt();
            String s = Long.toString(x,k);
            System.out.println(s);
        }
    }
}


发表于 2019-10-23 16:12:48 回复(0)
import java.util.Scanner;

public class  Main {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			long x=sc.nextLong();
			long k=sc.nextLong();
			Soultion s=new Soultion();
			System.out.println(s.trans(x,k));
		}
	}
	

}
class Soultion{
	public String trans(long x,long k){
		StringBuilder s=new StringBuilder();
		
		long yushu=0;
		while(x>=k){
			yushu=x%k;
			x=x/k;
            s.append(yushu);
		}
        if(x==0){
			s.append(0);
		}else if(x>0){
           s.append(x);  
        }
       
		
		return s.reverse().toString();
	}
}

编辑于 2019-09-25 20:40:12 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        long x=sc.nextLong();
        long k=sc.nextLong();
        StringBuilder sb=new StringBuilder();
        if(x==0){
            sb.append(0);
        }
        while(x!=0){
            sb.append(x%k);
            x=x/k;
        }
        String s=sb.reverse().toString();
        System.out.println(s);
    }
}

发表于 2019-09-09 19:48:20 回复(0)
#include <stdio.h>
#include <string.h>

int DataToBin(char *numstr, int bin, char *str);

int main(int argc, char *argv[])
{
/* 定义变量 */
char numstr[1024] = {'\0'};
int bin;
int res;
char str[1042] = {'\0'};

/* 接收参数和要转换的进制 */
scanf("%s %d", numstr, &bin);

/* 转换 */
res = DataToBin(numstr, bin, str);
if (res)
{
printf("输入进制有误,%d 进制不属于 2 至 9 进制!\n", bin);
}
/* 输出转换的进制 */
printf("%s\n", str);
return 0;
}

/*
* DataToBin函数:将输入的 num 转换为 bin 进制数据,以字符串形式存放在 str 中
* param:
*     num - 要转换的数据
*     bin - 转换的额进制
*     str - 以字符串形式存放在 str 中
* return:
*     -1 - 输入进制有误
*     0  - 转换成功
*/
int DataToBin(char *numstr, int bin, char *str)
{
/* 定义两个中间变量 temp1 和 temp2 将temp1 中的数每次除以要转换的进制,余数存在 str 中,商存在 temp2中,然后 把 temp2 拷贝到 temp1 中,循环,直到temp1 字符串为空为止 */
char *p = str;
char ch = '\0';
char temp1[1024] ={ '\0' };
char temp2[1024] ={ '\0' };
char *pt1 = temp1;
char *pt2 = temp2;

strcpy(temp1, numstr);

do
{
pt1 = temp1;
pt2 = temp2;
int i = 0;

while (*pt1 !='\0')
{
*pt2 = (i * 10 + ((*pt1) - '0')) / bin + '0';
if (pt1 == temp1 && (*pt2) == '0')
{
NULL;
}
else
{
pt2++;
}
i = (i * 10 + ((*pt1) - '0')) % bin;
pt1++;
}
*pt2 = '\0';

*str++ = i + '0';

strcpy(temp1, temp2);
} while (*temp1 != '\0');

/* 字符串转置 */
str--;
while (p < str)
{
ch = *p;
*p = *str;
*str = ch;
p++;
str--;
}

return 0;
}
编辑于 2019-09-08 11:19:48 回复(0)
while True:
    try:
        num, r = list(map(int, input().split(" ")))
        if num == 0:
            print("0")
        else:  
            result = ""
            while num != 0:
                result = str(num % r) + result
                num = num // r
            print(result)
    except:
        break

发表于 2019-08-19 00:27:06 回复(0)
#include <iostream>
#include <stack>
using namespace std;

int main()
{
    long long int num;
   int k,Remainder = 0;
   stack <int> v;
   cin >>num >>k;
   if(num == 0)
     cout << 0;
   else
    {
      while(num)
       {
         Remainder = num %k;
        v.push(Remainder);
        num = num/k;   
       }
       while(!v.empty())
       {
         cout<<v.top();
         v.pop();
        }    
    }
    
   return 0;
}

发表于 2019-08-15 15:57:16 回复(0)
#include <bits/stdc++.h>
using namespace std;
//小米 进制间转换

string fun(long long n,int x)    //将10进制的n转换成x进制的字符串  
{
    string ans = "";
    do{
        int _ = n%x;
        n /= x;
        if(_ >= 0 && _ <= 9)
        {
            ans += (_+'0');
        }
        else
        {
            ans += (_-10+'a');
        }
    }while(n != 0);   //以防输入为0的情况
    reverse(ans.begin(), ans.end());
    return ans;
}

int main()
{
    long long x;
    int k;    
    while(cin >> x >> k)
    {
        cout << fun(x,k) << endl;
    }
    return 0;
}

发表于 2019-07-15 23:06:07 回复(0)
x,k = list(map(int, input().split())) 
res = []
if x==0:print(0)
else:
    while(x):
        res.append(str(x%k))
        x//=k
    print(''.join(res)[::-1])

发表于 2019-07-11 09:33:55 回复(0)