C# 进制转换 (没有数值的长度限制)

  曾经在大学时做过一个c的进制转换算法,那时由于技术的局限性,数值的大小受到限制(系统数据类型长度限制),多年以后,自己那台学习机陈旧后感觉要报废了,整理了一下里面的东西,偶尔在一个角落里发现了这个转换算法,觉得它还有改进的地方,可以让它功能更强大(当时想过要转换超长数值,但受系统数据类型的局限性、个人开发语言深度的认知、以及视界观的狭隘,没能想到可以解决计算超长数据的有效的方法),这里我会将多年前大学里写的那段,和我修改后的粘贴出来,以飨读者。
 
传入参数:
string x 是超大数的字符串格式,当然越大越能显示出本方法的威力。
int y 是将传入的十进制数(前面的字符串)转换为32位进制以内的其他进制,范围(2~32)
        
说明:说是超长数据,其实还是受到最大
数限制,负责会溢出,不过这个最大数真的是太太大了,估计还没诞生过的吧?!呵呵。
复制代码
     static string DecimalismConversion(string x, int y)
        {
            Stack stack = new Stack();

            int length = Int64.MaxValue.ToString().Length - 2;

            while ( x!="")
            {
                string quotient = string.Empty;
                string remainder = string.Empty;
                int count = 0;
                Int64 i64 = 0;
                while (count * length < x.Length)
                {
                    string str = x.Substring(count * length, Math.Min(length, x.Length - count * length));
                    i64 = Convert.ToInt64(remainder + str);
                    remainder = (i64 % y).ToString();
                    quotient += (i64 / y).ToString().PadLeft(str.Length, '0');
                    count++;
                }
                Int64.TryParse(remainder, out i64);
                if (i64 % y < 10) stack.Push((char)(i64 % y + 48));
                else stack.Push((char)(i64 % y + 55));
                x = quotient.TrimStart(new char[] { ' ', '0' });
            }

            return new string(stack.ToArray());
        }
复制代码

 

以下这段是它的原身,现在想想就可笑,以前写程序设计(c语言),那么难看。

复制代码
int main(int x,int y) 
{  
    int i=0;
    char a[17]; 
    printf("Input:"); 
L: 
    scanf("%d %d",&x,&y); 
    if(x<=0||y<=2||y>=33)
    {
        printf("Input error,input again:");
        goto L;
    } 
    while(x!=0)
    { 
        if(x%y<10)
            a=(char)(x%y+48); 
        else
            a=(char)(x%y+55); 
        x=x/y; 
    } 
    for(i=i-1;i>=0;i--)
        printf("%c",a); 
    putchar('\n'); 
}
复制代码

 

 

 

posted @   牧师/preacher  阅读(726)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示