/// <summary>
/// 从M进制转换为N进制
/// </summary>
internal class MBase2NBase
{
/// <summary>
/// M进制值字符串
/// </summary>
private string MValue = ""; /// <summary>
/// 除法商
/// </summary>
private string Quotient = null; /// <summary>
/// M进制
/// </summary>
private int M = ; /// <summary>
/// N进制
/// </summary>
private int N = ; /// <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 < || M > )
{
throw new ArgumentOutOfRangeException("参数值不在2~36的范围内");
} if (N < || N > )
{
throw new ArgumentOutOfRangeException("参数值不在2~36的范围内");
} if (M == N)
{
return MValue;
} String nValue = "";
Quotient = MValue;
while (Quotient.Length > )
{
nValue = Remainder(Quotient) + nValue;
}
return nValue;
} /// <summary>
/// 对给定的M进制字符串对n求余
/// </summary>
/// <param name="mTempValue"></param>
/// <returns></returns>
private String Remainder(String mTempValue)
{
Quotient = "";
int temp = ;
while (mTempValue.Length > )
{
int t = GetIntFromStringFirstChar(mTempValue.Substring(, ));
mTempValue = mTempValue.Substring();
temp = temp*M + t;
Quotient += GetStrFromInt(temp / N);
temp = temp%N;
}
while (Quotient.Length > && Quotient[] == '')
{
Quotient = Quotient.Substring();
}
return GetStrFromInt(temp);
} /// <summary>
/// 字符串转换成Int
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private int GetIntFromStringFirstChar(String str)
{
return str[] <= '' && str[] >= '' ? str[] - '' : str[] - 'a' + ;
} /// <summary>
/// Int转换为相应进制的字符
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private String GetStrFromInt(int value)
{
String result = null;
if (value >= && value <= )
result = ((char) ('' + value)).ToString();
else if (value > && value < )
{
result = ((char) ('a' + value - )).ToString();
}
else
{
throw new Exception("未知错误");
} return result;
}
}

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

  1. 16进制字符串和byte数组进行相互转换\将10进制转换为任意进制

    16进制字符串和byte数组进行相互转换 简介 1个byte对应8个bit,16进制使用4个bit,所以一个byte转成16进制,占用两位. JAVA代码 private static final c ...

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

    // //  main.c //  Hex conversion // //  Created by ma c on 15/7/22. //  Copyright (c) 2015年 bjsxt. A ...

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

    答案如下: void Convert() { map<int ,string> maps; maps[0]="0"; maps[1]="1"; ma ...

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

    够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 --数组倒序排列 local function orderByDesc( input ) local output ...

  5. delphi 中字符串与16进制、10进制转换函数

      //字符串转成16进制代码function strToHexStr(str:string):string;varc:char;ss:string;i:integer;beginwhile str& ...

  6. 16进制字符串转换为3进制(扩展至K进制)

    [本文链接] http://www.cnblogs.com/hellogiser/p/16-to-3-or-k.html [题目] 写代码把16进制表示的串转换为3进制表示的串.例如x=”5”,则返回 ...

  7. C语言:其他进制转换为十进制(方法二)

    #include<stdio.h> #include<math.h> #include<string.h> #include<ctype.h> //其他 ...

  8. java中把字节数组转换为16进制字符串

    把字符串数组转换为16进制字符串 import java.security.MessageDigest; public class StringUtil { public StringUtil() { ...

  9. MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

    1.编辑框添加变量,并选择变量类型为CString. 2.  使用“_tcstoul”函数将Cstring 类型转换为16进制/10进制数进行计算.

随机推荐

  1. js中FOR循环的陷阱

    //闭包解决 循环输出的问题 for(var i=0;i<rows.length;i++) {( function (i) { })(i);

  2. java虚拟机垃圾回收机制详解

    首先,看一下java虚拟机运行的时候内存分配图: jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟机栈,线程退出的时候就销毁.这里面主要保存线程本地变量名和局部变量值. 本地方 ...

  3. 文科妹学 GitHub 简易教程(转)

    文科妹学 GitHub 简易教程     #什么是 Github ?必须要放这张图了!!! Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版 ...

  4. Codeforces #504(div1+div2) 1023D Array Restoration(线段树)

    题目大意:给你一个数组,数组是经过q次区间覆盖后的结果,第i次覆盖是把区间内的值赋值为i,其中有若干个地方数值未知(就是0),让你判断这个数组是否可以经过覆盖后得到的,如果可以,输出任意一种可行数组. ...

  5. SQL 连贯操作 [1]

    一. 连贯入门 查找到 id 为 1,2,3,4 中按照创建时间的倒序的前两位. 在 Home/controller/UserController.class.php 下插入 1.连贯操作入门 $us ...

  6. .NET回归 HTML----超文本标记语言(暂时无图)

    HTML用来做网页,文件拓展名改为html可以形成网页 超文本标记语言==超越了文字的范畴,除了文字还可以有图片.视频.音频.动画特效等其它内容,由标记符号<>组成的一门计算机编程语言 H ...

  7. 项目一:第九天 1、前台客户登录 2、Jquery citypicker省市区三级联动插件 4、业务受理(在线下单)

    1. 前台客户登录 2. Jquery citypicker省市区三级联动插件 3. 百度地图介绍 4. 业务受理(在线下单) 1 实现前台系统登录功能 1.1 Md5加密 admin(明文)---- ...

  8. Batch Normalization 与Dropout 的冲突

    BN或Dropout单独使用能加速训练速度并且避免过拟合 但是倘若一起使用,会产生负面效果. BN在某些情况下会削弱Dropout的效果 对此,BN与Dropout最好不要一起用,若一定要一起用,有2 ...

  9. CodeForces 173B Chamber of Secrets (二分图+BFS)

    题意:给定上一个n*m的矩阵,你从(1,1)这个位置发出水平向的光,碰到#可以选择四个方向同时发光,或者直接穿过去, 问你用最少的#使得光能够到达 (n,m)并且方向水平向右. 析:很明显的一个最短路 ...

  10. VS2012,更新补丁后--创建项目未找到与约束匹配的导出

    更新过一次漏洞,后来尝试建立一个项目,结果错误终于暴露了,创建项目时无法成功创建,而且提示:未找到与约束ontractNameMicrosoft.VisualStudio.Text.ITextDocu ...