求一个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#的实现方法!

解决方案 »

  1.   

    。google 一下 知道太多了。
      

  2.   

    就是进制的转换问题,其实是可以写一个通用(大于10进制的需要有特定的符号)的进制转换,如果你还记得曾经在学校讲的2,8,10,16进制的转换,那么恭喜你,你有能力完成这个问题,如果没有学过,那么baidu(据说google要退出中国)一下也能理解,实在不行就找段代码来看看,
      

  3.   


    我比较关注的是,你的内部变量是什么类型的,如果整形,那真没有什么办法,因为整型在机器里是用二进行存取的,但如果是字符串的话,那这个就麻烦一点了
    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;
    }当然还有更简单的方法,就是内部变量采用整数,然后在需要的时候,转换成相应的进制的字符串就可以了
    因为在计算机里,想要表示为其它进制,而让我们看到的情况,只能是字符串,因为数值类型的话,都是以二进制存储的
      

  4.   

    下面方法是传一个10进制的数和一个多少机制,然后就把这个数转成该进制的。
    这样之后你要做的就很简单了,数据运算就按十进制的来,把最后的结果通过这个方法转换一下就是你要的结果。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进制的转换可以修改下这个方法,就可以了。
      

  5.   

    Int是类吧,是十进制对吧。那咱就写一个自己的类,比如Number类,通过构造函数来决定是几进制的类。那对于一个新的数值来说,你可能就要同时指明进制,以及开始值了,才便于计算吗。至于最后显示的结果,用字符串形式显示吧。在前面用0n来做数字标示呀。就像0x标示十六进制一样嘛。既然要实现+1,也是实现你对应的进制的+1,那你就应该重载各种运算符了
    public static Number operator +(Number n1,Number n2);这样就可以满足你要的+效果了
    当然,你要+1,1又是十进制,这个时候你又要实现数值的显示,或隐式转换对吧。
    public static Number operator Number(int n1)
    这个就是将int转换成Number类型,然后就可以完成操作了呀。当然你也可以把Number转换成Int对吧。具体细节的实现,得看你到底想干嘛了。具体问题具体对待
      

  6.   

    刚才试写了一下 调试正确public string jinzhi(int m)//m是传进来的原数字
            {
                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;
            }
     
      

  7.   

            public string jinzhi(int m)
            {
                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;
            }
    完整的
      

  8.   

    public string StepTo(int baseInt,int paraInt)
    {
       int m=(int)(paraInt%baseInt);
       if(m==0)
          return baseInt+pareInt;
       else 
          return paraInt;
    }