精华内容
下载资源
问答
  • 十进制与自定义任意进制转换代码

    千次阅读 2015-04-29 09:04:25
    有时我们在使用十进制的时候,会有长度过长情况。如加密或传输的过程中,日期数据20141230 使用进制...因此写了一个十进制与任意自定义进制转换的工具类,可以将十进制转换成任意进制,也可以让任意进制转换回十进制。

    有时我们在使用十进制的时候,会有长度过长情况。如加密或传输的过程中,日期数据20141230 使用进制转换可以少好几位长度。

    因此写了一个十进制与任意自定义进制转换的工具类,可以将十进制转换成任意进制,也可以让任意进制转换回十进制。

    希望大家也能用得上。


    public class TEST {
    
    	public static final String CHS_STR = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    
    	//0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		System.out.println("value:" + numToStr(20141230) );
    		System.out.println("num:" + strToInt("WU"));
    		String ss = "12345678";
    		String str ="";
    		for(char c : ss.toCharArray()){
    			str += numToStr( (int)c );
    		}
    		System.out.println("str:"+str);
    	}
    
    	/**
    	 * @param i
    	 * @return
    	 */
    	public static String numToStr(long _int) {
    		if (_int < 0) {
    			return null;
    		}
    		int len = CHS_STR.length();
    		char[] chs = CHS_STR.toCharArray();
    		int n = -1;
    		long intVal = _int;
    		StringBuffer val = new StringBuffer();
    		do {
    			if (intVal < len) {
    				n = (int) intVal;
    			} else {
    				n = (int) (intVal % len);
    			}
    			intVal = (int) Math.floor(intVal / len);
    			val.append(chs[n]);
    		} while (intVal > 0);
    		val = val.reverse();
    		return val.toString();
    	}
    
    	public static long strToInt(String str) {
    		int len = CHS_STR.length();
    		char[] chs = CHS_STR.toCharArray();
    		StringBuffer sb = new StringBuffer(str.trim());
    		char[] strs = sb.reverse().toString().toCharArray();
    		long num = 0;
    		for (int i = 0; i < strs.length; i++) {
    			int ind = 0;
    			for (char c : chs) {
    				if (strs[i] == c) {
    					break;
    				}
    				ind++;
    			}
    			num += ind * (int) Math.pow(len, i);
    		}
    		return num;
    	}
    }
    


    展开全文
  • C语言实现任意进制转换代码及解析

    万次阅读 多人点赞 2019-02-26 20:23:48
    给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换。 问题分析 掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制还有下面几...

    问题描述

    给定一个 M 进制的数 x,实现对 x 向任意的一个非 M 进制的数的转换。

    问题分析

    掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制还有下面几个必须要了解的概念。

    基数:在一种数制中,只能使用一组固定的数字来表示数的大小,这组固定的数字的个数就称为该计数制的基数(Base)。例如十进制的基数为10,二进制的基数为2等。

    权:又称为位权或权值,即每一个数位都有一个固定的基值与之相对应,称之为权。如十进制的个位对应的权值为1(100),十位对应的权值为10(101),百位对应的权值为100(102)。对于一个 M 进制的数来说,小数点左边各位上对应的权值从右到左分别为基数的0次方、基数的1次方、基数的2次方等,对于小数点右边各位上对应的权值从左到右分别为基数的-1次方、基数的-2次方等。

    二进制、八进制、十六进制向十进制转换:按权展开相加。

    十进制转换成二进制、八进制、十六进制:整数部分除以基数取余数(取余的方向为从后向前);小数部分乘以基数取整数(取整的方向为从前向后)。

    二进制、八进制、十六进制相互转换:先转换成十进制再转换成其他进制;或者按照其对应关系进行转换(三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数)。本例题按照前一种转换方式进行编程。

    算法设计

    十六进制是由 0~F 这一组固定的数字来表示,所以釆用字符数组进行存储。在进行输入输出时数组元素都是以字符的形式存在的,但是在进行数制转换时数组元素又以数值的形式存在,程序中用两个自定义函数 char_to_number 和 number_to_char 来实现字符与其对应数值之间的转换。

    在执行程序时可以输入多组数据来验证程序的正确性,以前的程序都是多次运行,输入不同的数据来实现。对程序稍做改进,只运行一次程序但可以输入多组数据进行验证。解决这个问题只需要加一层循环,如果循环条件为真则继续输入数据,否则退出。循环条件为真即表达式的值不为0,这样可以声明一个变量假设为 flag,利用语句 while(flag){循环体} 来进行控制,当 flag 的值为1时可以接着输入,若为0则结束循环。

    下面是完整的代码:

    #include <stdio.h>
    
    #define MAXCHAR 101  /*最大允许字符串长度*/
    
    int char_to_num(char ch);  /*返回字符对应的数字*/ 
    char num_to_char(int num);  /*返回数字对应的字符*/
    long source_to_decimal(char temp[], int source);  /*返回由原数转换成的10进制数*/
    int decimal_to_object(char temp[], long decimal_num, int object);  /*返回转换成目标数制后字符数组的长度*/
    void output(char temp[], int length);  /*将字符数组逆序打印*/
    
    int main()
    {
        int source;  /*存储原数制*/
        int object;  /*存储目标数制*/
        int length;  /*存储转换成目标数制后字符数组的长度*/
        long decimal_num;  /*存储转换成的10进制数*/
        char temp[MAXCHAR];  /*存储待转换的数值和转换后的数值*/
        int flag = 1;  /*存储是否退出程序的标志*/
        while(flag)  /*利用输入的flag值控制循环是否结束*/
        {
            printf("转换前的数是:");
            scanf("%s", temp);
            printf("转换前的数制是:");
            scanf("%d", &source);
            printf("转换后的数制是:");
            scanf("%d", &object);
            printf("转换后的数是:");
            decimal_num = source_to_decimal(temp, source);
            length = decimal_to_object(temp, decimal_num, object);
            output(temp, length);
            printf("继续请输入1,否则输入0:\n");
            scanf("%d", &flag);
        }
    
        return 0;
    }
    /*将字符转换成数字*/
    int char_to_num(char ch)
    {
        if(ch>='0' && ch<='9')
            return ch-'0';  /*将数字字符转换成数字*/
        else
            return ch-'A'+10;  /*将字母字符转换成数字*/
    }
    char num_to_char(int num)
    {
        if(num>=0 && num<=9)
            return (char)('0'+num-0);  /*将0~9之间的数字转换成字符*/
        else
            return (char)('A'+num-10);  /*将大于10的数字转换成字符*/
    }
    long source_to_decimal(char temp[], int source)
    {
        long decimal_num = 0;  /*存储展开之后的和*/
        int length;
        int i;
        for( i=0; temp[i]!='\0'; i++ );
        length=i;
        for( i=0; i<=length-1; i++ )  /*累加*/
            decimal_num = (decimal_num*source) + char_to_num(temp[i]);
        return decimal_num;
    }
    int decimal_to_object(char temp[], long decimal_num, int object)
    {
        int i=0;
        while(decimal_num)
        {
            temp[i] = num_to_char(decimal_num % object);  /*求出余数并转换为字符*/
            decimal_num = decimal_num / object;  /*用十进制数除以基数*/
            i++;
        }
        temp[i]='\0';
        return i;
    }
    void output(char temp[], int length)
    {
        int i;
        for( i=length-1; i>=0; i--)  /*输出temp数组中的值*/
            printf("%c", temp[i]);
        printf("\n");
    }

    运行结果:

    转换前的数是:17
    转换前的数制是:10
    转换后的数制是:2
    转换后的数是:10001
    继续请输入1,否则输入0:
    1
    转换前的数是:17
    转换前的数制是:10
    转换后的数制是:8
    转换后的数是:21
    继续请输入1,否则输入0:
    1
    转换前的数是:17
    转换前的数制是:10
    转换后的数制是:16
    转换后的数是:11
    继续请输入1,否则输入0:
    1
    转换前的数是:12122
    转换前的数制是:8
    转换后的数制是:10
    转换后的数是:5202
    继续请输入1,否则输入0:
    0

     

    展开全文
  • 通过用户菜单选择需要转换的数字和任意进制 直接上代码了 #include<algorithm> #include<cmath> #include<string> #include<iostream> using namespace std; #include<stack> int _...

    通过用户菜单选择需要转换的数字和任意进制

    直接上代码了

    #include<algorithm>
    #include<cmath>
    #include<string>
    #include<iostream>
    using namespace std;
    #include<stack>
    
    int _sys=0;  //进制
    string  _input(" ");//转换数字
    
    
    
    
    //10进制转任意进制
    void func2(){
    //eg: 10 2  先输出最后的商然后倒序输出余数
    
    cout<<"请输入要转换的数字"<<endl;
    cin>>_input;
    cout<<"请输入要转换的进制"<<endl;
    cin>>_sys;
    stack<int> s;
    int res=0;
    const char*p=_input.c_str();
    int _num=atoi(p);  //拿到数字10
    int tmp;
    
    while(_num/_sys>=_sys){
    s.push(_num%_sys);
    
    _num=_num/_sys;
    tmp=_num;
    }
    
    s.push(tmp%_sys);
    s.push(_num/_sys);
    while(!s.empty()){
    cout<<s.top();
    s.pop();
    
    }
    
    }
    
    
    
    
    
    
    
    //任意进制转10进制
    void func1(){
    //eg: 1010 2 
    
    cout<<"请输入要转换的数字"<<endl;
    cin>>_input;
    cout<<"请输入要转换的进制"<<endl;
    cin>>_sys;
    const char *p=_input.c_str();
    int _num=atoi(p);
    int res=0;
    int len=_input.size();
    
    
    for(int i=0;i<len;++i){
    res+=(_input[i]-48)*pow(_sys,len-1-i);
    
    }
    cout<<res<<endl;
    
    }
    
    
    
    void menu(){
    
    cout<<"*********************************************"<<endl;
    cout<<"1. 任意进制转换10进制    2.10进制转换任意进制 "<<endl;
    cout<<"*********************************************"<<endl;
    
    }
    
    
    
    
    int main(){
    
    int _sys;  //进制
    string  _input;//转换数字
    int _switch;//函数选择
    
    
    menu();//选择菜单
    cout<<"请输入要执行的功能"<<endl;
    cin>>_switch;
    
    switch(_switch){
    
    case 1:  func1();     break;
    case 2:  func2();     break;
    default: cout<<"输入有误";       
    break; 
    }
    
    
    return 0;
    }
    
    
    
    
    展开全文
  • 将一个数字 从任意进制 转换任意进制 的数值。 实现 Python2 def baseconvert(number, fromdigits, todigits): if str(number)[0] == '-': number = str(number)[1:] neg = 1 else: neg = 0 # make an...

    需求

    将一个数字 从任意进制 转换为 任意进制 的数值。

    实现

    Python2

    
    def baseconvert(number, fromdigits, todigits):
        if str(number)[0] == '-':
            number = str(number)[1:]
            neg = 1
        else:
            neg = 0
        # make an integer out of the number
        x = long(0)
    
        for digit in str(number):
            x = x*len(fromdigits) + fromdigits.index(digit)
    
        # create the result in base 'len(todigits)'
        res = ""
        while x > 0:
            digit = x % len(todigits)
            res = todigits[digit] + res
            x /= len(todigits)
        if neg:
            res = "-"+res
        return res
    
    //将8从10进制转为二进制
    print(baseconvert(8, "0123456789","01"))
    //将100从10进制转为八进制
    print(baseconvert(100, "0123456789","01234567"))
    

    Python3

    需要修改x = long(0)x=0
    原因:Python3.x中没有long类型,只有int类型。

    同时修改x /= len(todigits)x //= len(todigits)
    原因:python3使用//作为整除符号

    展开全文
  • C语言实现十进制向任意进制转换代码,已经经过调试无问题。可以直接使用
  • C++任意进制转换为十进制我们知道任意进制转换为十进制,都是乘以基数的多少次方,然后相加。 废话不多说直接上代码。#include #include using namespace std;int main() { int r,i=0,ans=0; string n; cin>>r>>...
  • 进制转换任意进制代码,很方便使用和笔试
  • 问题 A: 进制转换 时间限制:1 Sec内存限制:128 MB提交:67解决:28[提交][状态][讨论版] 题目描述 请你编一程序实现两种不同进制之间的数据转换。 输入 输入数据共有三行,第一行是一个正整数,表示需要转换的数...
  • 任意进制转换c源代码任意进制转换c源代码任意进制转换c源代码
  • 任意进制转换

    2021-01-18 14:16:30
    任意进制转换前言一、十进制转换成任意进制使用短除法即可二、任意进制转换成十进制代码如下: 前言 进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。 基数是指...
  • 将十进制与任意进制相与转换,这是用DELPHI程序实现进制转换函数。
  • 牛客小白月赛20 F进制转换 算法分析 详细分析进制转换 代码实现 #include<iostream> #include<cstring> #include<math.h> #include<vector> #include<string> using namespace std; ...
  • C#进制转换,可以从任意进制任意进制,暂不支持小数
  • 代码来的,经过运行唔错的,想交作业或者懒得去计算的可以下载去玩玩
  • 可以将十进制转换二到三十六进制,二进制 八进制 十六进制
  • JAVA实现蓝桥杯基础练习十六进制转换八进制-----------拓展进制转换计算器 这个题目我浏览了大量的道友的文章发现十分麻烦,但仍然从其中收益菲薄,所以在这里分享一下我认为最好的代码 import java.math.BigInteger...
  • 基本算法中的任意进制之间的转换实例,采用栈结构保存所转换的结果。...成的进制转换代码: #define STACK_INT_SIZE 100 #define STACKINCREMENT 10 #define OVERFLOW -1 #define OK 1 #define ERROR 0 #define ...
  • 任意进制转换十进制 – 数据结构c语言队列操作实现 代码也不算是任意进制,最高只能到十六进制。见谅! 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE...
  • C语言实现:任意进制转换

    千次阅读 多人点赞 2018-12-10 13:07:36
    用C语言程序来实现任意进制之间的转换 思路: 以十进制数为媒介,先将需要转换的数转换成十进制数,再将其转换成目标进制数 将涉及高于十进制的转换的数挑出来,利用ASCALL码将字符转换成整型或将整型转换成...
  • 十进制转任意进制 分析:十进制数 X 转 M 进制,方法是:从 X 开始循环除以 M ,记下余数,整数商作为新的 X 继续除以 M ,直到 X=0 为止。然后倒序取余数即可。 (10 进制转 2 进制) (10 进制转 16 进制)...
  • 十进制向任意进制转换代码已在vs2015编译运行通过。#include #include using namespace std; int main() { stack<int> s;A: cout请输入十进制数和进制:"; int num,dig;//十进制数据 cin>>num>>dig; if(dig){
  • C++任意进制转换为十进制

    千次阅读 2018-08-12 16:09:53
    C++任意进制转换为十进制 我们知道任意进制转换为十进制,都是乘以基数的多少次方,然后相加。 废话不多说直接上代码。 #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; ...
  • 这种题也是一道经典的面试题,主要考察进制转换细想,Coding质量等。  当我们把十进制转成二进制的时候,我们通过辗转相除,取余,逆置余数序列的过程得到新的进制的数。因此我们可以借助这种思想把M进制转成N进制...
  • poj1220 (高精度任意进制转换)

    千次阅读 2013-08-20 02:36:15
    高精度任意进制转换 代码是从discuss里找到的,据说是maigo神牛写的。 超精简!! 我自己第一写的时候,还把n进制先转成10进制,然后再从10进制转为m进制。。。 悲催的是写了好长滴,还没调对啊!!! Code:...
  • 顺序栈实现任意进制转换

    千次阅读 2019-03-16 17:30:05
    我们都熟悉任意进制和十进制之间的转换任意进制转换的思路就是以十进制为桥梁,先把数字转成十进制,再把十进制转成目的进制。 任意进制转十进制,比如:45(8),转成十进制,其 result = 4x81+5x80 = 32+5 = 37...
  • Js 任意进制转换工具原理很简单,不啰哩啰唆;可以将任意进制转成10进制,或10进制转成任意进制。Java源码:package red.stu.util.hex; /** * 进制转换工具 * * @author yihrmc * */ public final class ...
  • 进制转换 描述 在16进制中,大写字母A代表10,B代表11,…,F代表15。请将x进制的数字a转化为y进制,并输出。 输入 输入分三行,第一行一个数字x(2<=x<=16),第二行一个数字y(2<=y<=16),第三行一个...
  • 进制转换C语言实现(十进制转换任意进制

    万次阅读 多人点赞 2018-12-20 21:20:18
    输入一个十进制数和R(表示要转换成R进制),输出转换后的数。 事例 例如:输入 10 2 输出 1010 源代码如下: #include&lt;stdio.h&gt; #include&lt;string.h&gt; //int n,num[15],r,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,859
精华内容 58,343
关键字:

任意进制转换代码