从M进制转换为N进制

    /// <summary>
    /// 从M进制转换为N进制
    /// </summary>
    internal class MBase2NBase
    {
        /// <summary>
        /// M进制值字符串
        /// </summary>
        private string MValue = "123";

        /// <summary>
        /// 除法商
        /// </summary>
        private string Quotient = null;

        /// <summary>
        /// M进制
        /// </summary>
        private int M = 10;

        /// <summary>
        /// N进制
        /// </summary>
        private int N = 8;

        /// <summary>
        /// .ctor
        /// </summary>
        public MBase2NBase()
        {

        }

        /// <summary>
        /// .ctor
        /// </summary>
        /// <param name="mValue">M进制值字符串</param>
        /// <param name="m">M进制(如10).参数值在2~36的范围内</param>
        /// <param name="n">N进制(如8),则意味着从10进制转换成8进制.参数值在2~36的范围内</param>
        public MBase2NBase(string mValue, int m, int n)
        {
            this.M = m;
            this.N = n;
            this.MValue = mValue;
        }

        /// <summary>
        /// 开始转换
        /// </summary>
        /// <param name="mValue">M进制值字符串</param>
        /// <param name="m">M进制(如10).参数值在2~36的范围内</param>
        /// <param name="n">N进制(如8),则意味着从10进制转换成8进制.参数值在2~36的范围内</param>
        /// <returns>N进制字符串</returns>
        public string Transform(string mValue, int m, int n)
        {
            this.M = m;
            this.N = n;
            this.MValue = mValue;
            return Transform();
        }

        /// <summary>
        /// M进制值字符串
        /// </summary>
        /// <returns>N进制字符串</returns>
        public string Transform()
        {
            if (M < 2 || M > 36)
            {
                throw new ArgumentOutOfRangeException("参数值不在2~36的范围内");
            }

            if (N < 2 || N > 36)
            {
                throw new ArgumentOutOfRangeException("参数值不在2~36的范围内");
            }

            if (M == N)
            {
                return MValue;
            }

            String nValue = "";
            Quotient = MValue;
            while (Quotient.Length > 0)
            {
                nValue = Remainder(Quotient) + nValue;
            }
            return nValue;
        }

        /// <summary>
        /// 对给定的M进制字符串对n求余
        /// </summary>
        /// <param name="mTempValue"></param>
        /// <returns></returns>
        private String Remainder(String mTempValue)
        {
            Quotient = "";
            int temp = 0;
            while (mTempValue.Length > 0)
            {
                int t = GetIntFromStringFirstChar(mTempValue.Substring(0, 1));
                mTempValue = mTempValue.Substring(1);
                temp = temp*M + t;
                Quotient += GetStrFromInt(temp / N);
                temp = temp%N;
            }
            while (Quotient.Length > 0 && Quotient[0] == ‘0‘)
            {
                Quotient = Quotient.Substring(1);
            }
            return GetStrFromInt(temp);
        }

        /// <summary>
        /// 字符串转换成Int
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private int GetIntFromStringFirstChar(String str)
        {
            return str[0] <= ‘9‘ && str[0] >= ‘0‘ ? str[0] - ‘0‘ : str[0] - ‘a‘ + 10;
        }

        /// <summary>
        /// Int转换为相应进制的字符
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        private String GetStrFromInt(int value)
        {
            String result = null;
            if (value >= 0 && value <= 9)
                result = ((char) (‘0‘ + value)).ToString();
            else if (value > 9 && value < 36)
            {
                result = ((char) (‘a‘ + value - 10)).ToString();
            }
            else
            {
                throw new Exception("未知错误");
            }

            return result;
        }
    }
时间: 2024-10-26 11:39:00

从M进制转换为N进制的相关文章

convert time-24小时制转换为12小时制

convert time-24小时制转换为12小时制,允许重复计算: //convert time #include<iostream> using namespace std; void get_time(int& hours,int& minutes); void convert_time(int& hours,char& ampm); void show_time(int hours,int minutes,char ampm); int main() {

用C++实现:将16进制转换为10进制

问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 using namespace std; 5 int main(void) 6 { 7 int n; 8 int temp; 9 char* arr = new char[9]; //

十进制和n进制的转换(10进制转换为36进制)

答案如下: void Convert() { map<int ,string> maps; maps[0]="0"; maps[1]="1"; maps[2]="2"; maps[3]="3"; maps[4]="4"; maps[5]="5"; maps[6]="6"; maps[7]="7"; maps[8]="8&quo

lua之m进制转换为n进制-任意进制转换算法

够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 1 --数组倒序排列 2 local function orderByDesc( input ) 3 local output = {} 4 local count = #input 5 while count > 0 do 6 table.insert(output, input[count] ) 7 count = count -1 8 end 9 return output 10 end 11 12 --

C语言:十进制进制转换为其他进制(思想:查表法)

// //  main.c //  Hex conversion // //  Created by ma c on 15/7/22. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:十进制向任意进制之间的转换(查表法). #include <stdio.h> //十六进制的转换 void ToHex(int num) { int temp; char chs[8];//定义一个临时容器,长度为8,8X4=32位比特 int

c++中便捷的进制转换(输入16进制转换为10进制)

#include<iostream> using namespace std; int main() { int a,b; while(cin >> hex >> a >> b) { cout << dec << a+b << endl; } return 0; }

华为笔试练习题----解析9进制,11进制的字符串为10进制的数字输出

                                                                              解析9进制,11进制的字符串为10进制的数字输出 描述: 解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位.解析后以10进制的数字输出.如果解析到非法字符串则返回-1 9进制: 9进制的数的范围:0,1,2,3,4,5,6,7,8 9进制的开始为:0V或者0

蓝桥杯 16进制转换8进制

蓝桥杯 16进制转换8进制 我表示我自己太渣渣了,总是超时,通不过测试. 题目 问题描述 给定n个十六进制正整数,输出它们对应的八进制数.输入格式 输入的第一行为一个正整数n (1<=n<=10). 接下来n行,每行一个由0~9.大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000.输出格式 输出n行,每行为输入对应的八进制正整数.注意 输入的十六进制数不会有前导0,比如012A. 输出的八进制数也不能有前导0.样例输入239123ABC样例输出7144

2进制,10进制,16进制,补码和移位

逢二进一,逢十进一,十六进制 10110101(2) = 128+32+16+4+1 = 181(10) b 5(16) = b*16+5 = 11*16+5 = 181(10) 2进制 int n = 45; System.out.println(Integer.toBinaryString(n)); 计算机的内部(Java)只有2进制数据, 在显示的时候编程语言提供API将2进制转换为10进制显示出来. 计算机只能处理2进制数据, 利用编程语言提供的算法支持了10进制 Java中用于支持2进