求一个C#函数,要求实现进制转换。
如传一个int数,假如传入的参数是10,那么函数内的变量 +1时,便逢10进1;传入的参数如果是5,那么函数内的变量 +1时,则逢5进1。比如逢5进1的情况,
我的数字按此函数生成将是这样:
"0000",
"0001",
"0002",
"0003",
"0004",
"0010",
"0011",
"0012",
"0013",
"0014",
"0020",
"0021",
"0022",
"0023",
"0024",
"0030",
"0031",
....求一下这个函数用C#的实现方法!
如传一个int数,假如传入的参数是10,那么函数内的变量 +1时,便逢10进1;传入的参数如果是5,那么函数内的变量 +1时,则逢5进1。比如逢5进1的情况,
我的数字按此函数生成将是这样:
"0000",
"0001",
"0002",
"0003",
"0004",
"0010",
"0011",
"0012",
"0013",
"0014",
"0020",
"0021",
"0022",
"0023",
"0024",
"0030",
"0031",
....求一下这个函数用C#的实现方法!
解决方案 »
- 关于类Environment使用方法,
- 有关 DevExpress.XtraGrid 分组问题
- c#2005中如何改变listview指定行和指定列和指定单元格的颜色?
- 我要怎样才能用线程处理好这件事?
- c#+ext js例子
- 二维数组能作为DataGrid的数据源吗?
- 帮我解决程序耗资源问题!!!
- 请问,如何给生成的FORM程序中加入图标图片?!--在线等候!!!
- 学习C#的朋友请到http://www.wenhui.org
- 我的.net环境最近老是报这个错,怎么回事?
- .net与com是什么关系,是平行的,还是基于(.net基于com)的关系?
- 哪位达人能把这句BS架构的语句翻译成CS架构的
我比较关注的是,你的内部变量是什么类型的,如果整形,那真没有什么办法,因为整型在机器里是用二进行存取的,但如果是字符串的话,那这个就麻烦一点了
int jinwei=0; //进位标志
int base = 10; //10进制
Char[] a=.....; // 这个是数字的字符表示数组
for(int i=a.Length-1;i>=0;i--)
{
int ia=Convert.ToInt32(a[i]); // 数字值
ia+=1+jinwei; // 加上1,以及低位的进位
jinwei = ia/base ; // 下一个要进位多少
ia%=base;
a[i]=(Char)ia;
}当然还有更简单的方法,就是内部变量采用整数,然后在需要的时候,转换成相应的进制的字符串就可以了
因为在计算机里,想要表示为其它进制,而让我们看到的情况,只能是字符串,因为数值类型的话,都是以二进制存储的
这样之后你要做的就很简单了,数据运算就按十进制的来,把最后的结果通过这个方法转换一下就是你要的结果。private static string ConvertNum(int num, int jizhi)
{
StringBuilder sb = new StringBuilder();
string str = "";
int temp = 0;
while (true)
{
if (num == 0)
break;
temp = num % jizhi;
if (jizhi > 10)
{
str = ConvertNumToStr(temp);
}
else
{
str = temp.ToString();
}
sb.Insert(0, str);
num = num / jizhi;
}
return sb.ToString();
}
比如for (int i = 1; i <= 30; i++)
{
Console.WriteLine(ConvertNum(i, 7));
}就可以得到从1到42的30个7机制位的数,但是如果进制超过10的,比如16就要注意了,得作下映射,即11是a,12是b,13是c等等,否则得到的结果可能会让你郁闷,不过对于10进制以下的进制是没有问题的。
下面是我写的一个16进制的映射方法。private static string ConvertNumToStr(int num)
{
string str = "";
switch (num)
{
case 10:
str = "a";
break;
case 11:
str = "b";
break;
case 12:
str = "c";
break;
case 13:
str = "d";
break;
case 14:
str = "e";
break;
case 15:
str = "f";
break;
default:
str = num.ToString();
break;
}
return str;
}在原方法中已经调用了,测试可以通过,如果你要做其它大于10进制的转换可以修改下这个方法,就可以了。
public static Number operator +(Number n1,Number n2);这样就可以满足你要的+效果了
当然,你要+1,1又是十进制,这个时候你又要实现数值的显示,或隐式转换对吧。
public static Number operator Number(int n1)
这个就是将int转换成Number类型,然后就可以完成操作了呀。当然你也可以把Number转换成Int对吧。具体细节的实现,得看你到底想干嘛了。具体问题具体对待
{
int k = int.Parse(numericUpDown1.Value.ToString());//numericUpDown1是一个下拉式选数字的框,用来选择几进制。自己可以在界面上建
string n = string.Empty;//返回的字符串
int temp;//临时存放即将放入n的int值
for (; m != 0; )
{
temp = m % k;
n = temp.ToString() + n;
m = m / k;
}
return n;
}
{
int k = int.Parse(numericUpDown1.Value.ToString());
string n = string.Empty;
int temp;
for (; m != 0; )
{
temp = m % k;
n = change(temp) + n;
m = m / k;
}
return n;
} public string change(int m)
{
string str = string.Empty;
switch (m)
{
case 10:
str = "a";
break;
case 11:
str = "b";
break;
case 12:
str = "c";
break;
case 13:
str = "d";
break;
case 14:
str = "e";
break;
case 15:
str = "f";
break;
default:
str = m.ToString();
break;
}
return str;
}
完整的
{
int m=(int)(paraInt%baseInt);
if(m==0)
return baseInt+pareInt;
else
return paraInt;
}