【问题描述】

在Excel中,列的名称是这样一个递增序列:A、B、C、…、Z、AA、AB、AC、…、AZ、BA、BB、BC、…、BZ、CA、…、ZZ、AAA、AAB…。
我们需要将上述列名序列和以下自然数序列相互转换:1、2、3、…。

【问题分析】

经过分析,我们不难发现,这是一个26进制和十进制相互转换的问题。序列A-Z依次对应序列1-26。进制转换的基本办法就是“取余法”,换算规则如下:
ABZ = 1*26² + 2 * 26¹ + 26*26°= 676 + 52 + 26 = 754
于是,我们就知道该如何设计一个十进制转换为26进制的算法了。

【算法描述】
Step1.[取余] 用指定自然数n除以26,得到一个余数m。如果m = 0,置m←26。
Step2.[转换为字符] 将m映射为字符c,映射规则是{1-26}->{A-Z}。然后将c拼接到26进制值s的左边,也就是置s←c + s。
Step3.[去余降幂] 置n←(n–m)/26。如果n > 0,则回到Step1继续执行,否则进入Step4。
Step4.[结束] 返回s。

按照上述思想,26进制转换为十进制的过程正好是相反的,而且实现起来也更为简单,在此不述。


c++代码:

#include<iostream>
#include <algorithm>
using namespace std;int main(){long long ans=0;string s;cin>>s;int len=s.size();for(int i=0,j=1;i<s.size();i++,j*=26){ans+=(int)(s[len-i-1]-64)*j;}cout<<ans<<endl;   //26进制转十进制string str="";while(ans>0){int m=ans%26;if(m==0) m=26;str+=(char)(m+64);ans=(ans-m)/26;}reverse(str.begin(),str.end()); //反序    cout<<str<<endl;    //  十进制转26进制 return 0;
}

C#源代码如下:

/// <summary>
/// 将指定的自然数转换为26进制表示。映射关系:[1-26] ->[A-Z]。
/// </summary>
/// <param name="n">自然数(如果无效,则返回空字符串)。</param>
/// <returns>26进制表示。</returns>
public static string ToNumberSystem26(int n){string s = string.Empty;while (n > 0){int m = n % 26;if (m == 0) m = 26;s = (char)(m + 64) + s;n = (n - m) / 26;}return s;
} /// <summary>
/// 将指定的26进制表示转换为自然数。映射关系:[A-Z] ->[1-26]。
/// </summary>
/// <param name="s">26进制表示(如果无效,则返回0)。</param>
/// <returns>自然数。</returns>
public static int FromNumberSystem26(string s){if (string.IsNullOrEmpty(s)) return 0; int n = 0;for (int i = s.Length - 1, j = 1; i >= 0; i--, j *= 26){char c = Char.ToUpper(s[i]);if (c < 'A' || c > 'Z') return 0;n += ((int)c - 64) * j;}return n;
}static void Main(string[] args){int[] numbers = { 1, 10, 26, 27, 256, 702, 703 };foreach (int n in numbers){string s = ToNumberSystem26(n);Console.WriteLine(n + "\t" + s + "\t" + FromNumberSystem26(s));}Console.ReadLine();
}

十进制和26进制转换算法相关推荐

  1. 笔记:JS仿excel十进制和26进制转换算法

    笔记:JS仿excel十进制和26进制转换算法 引子:看过这篇文章用C#实现的十进制和26进制转换算法,觉得在前端以后会用到,遂改写出Javacript的写法. 十进制转26进制: function ...

  2. 十进制与26进制英文字母互转

    最近在封装Excel组件,需要提供两个接口,分别根据单元索引和单元名称访问单元格.例如,GetCell(1, 2)和GetCell("A2"),这两种方法返回的结果是相同的.这里遇 ...

  3. 二进制 八进制 十进制 十六进制 之间进制转换(图解篇)

    一.本文所涉及的内容(Contents)                      目录 一.本文所涉及的内容(Contents) 二.背景(Contexts) 三.进制转换算法(Convert) ( ...

  4. 进制转换算法 (C语言实现一个简单的二进制转换工具) ------- 算法笔记010

    进制转换算法概念 其核心是利用栈的存储结构性质,进行数据的入栈出栈时的计算,让后将计算好的数据存入另一个栈内,最后再出栈输出.由于栈的先进后出特性,最后输出的顺序和输入的顺序是一样的.具体如上图. 栈 ...

  5. 进制转换算法(通用,极简)

    检索词: ​ 进制转换.通用进制转换.二进制转十进制.二进制转八进制.二进制转十六进制. ​ 十进制转二进制.十六进制转二进制.八进制转二进制.通用算法.字符型输入输出 一.英文先行 英文 中文 缩写 ...

  6. 计算机13E怎么转换成十进制,十六进制换算(进制转换计算器)

    把下面的16进制转为10进制b35de1f058c72a7430241461cd504839dc27438e. 16进制转10进制16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第 ...

  7. m进制转换为n进制-任意进制转换算法

    这种题也是一道经典的面试题,主要考察进制转换细想,Coding质量等. 当我们把十进制转成二进制的时候,我们通过辗转相除,取余,逆置余数序列的过程得到新的进制的数.因此我们可以借助这种思想把M进制转成 ...

  8. 26英文字母加减26进制转换

    package com.chinait.utils; /*** 算法输出(A后面的多少位的字符串,超过Z 则改为 AA 开始),相当于用26进制的加法过程,但是是由英文字母来定义的,使用场景在于处理e ...

  9. oracle转换为16进制,Oracle的十进制和16进制转换函数

    Oracle的10进制和16进制转换函数 在数据库中,常常需要将10进制转16进制,又会需要将16进制转10进制.有两个使用PL/SQL开发的函数,可以方便使用. create or replace ...

最新文章

  1. Problem 62 Java中的final关键字?
  2. Chapter18-Export and Import Utilities
  3. 程序员永远不要再犯的5个编程错误
  4. python matplotlib 饼图标签重叠_Python绘制饼图调节字体大小、防止标签重叠解决方法...
  5. input file 上传文件格式限制
  6. python3.6安装tesserocr
  7. Val编程-按键响应模式
  8. 「前端」History API与浏览器历史堆栈管理
  9. 微机原理实验8254计算机钢琴,GitHub - SincereXIA/PianoMFC: 西电微机原理课设项目,键盘电子乐器演奏程序设计(电子琴),MFC...
  10. Redis:06---数据库管理
  11. python3怎么安装mysql_Python3下mysqlclient的安装和使用
  12. Android Unable to execute dex: java.nio.BufferOverflowException
  13. 2020电信最新套餐一览表_最新!2020年宁波中学排名一览表
  14. Python(二)JavaPython混合编程
  15. Pgadmin4转圈圈无法进入到界面(pgadmin v4一直卡在loading页面)
  16. html页面点击生成图片并可以下载图片
  17. 【路径规划】基于改进粒子群实现机器人栅格地图路径规划
  18. 介绍一个用于EOS区块链的RPC API接口的PHP开发包SDK
  19. VS1005 HiRes 高清播放器方案
  20. Excel公式向导,详细演艺多条件求平均值的操作

热门文章

  1. 设置默认网关端口 android,默认网关怎么填,网关设置为多少如何设置
  2. github水文代码干货
  3. 最权威的身份证号码的正则表达式
  4. 关爱教育奉献社会,努力实践热血青春
  5. Ros-Bot在全屏和4k屏下怎样兼容
  6. 应届毕业生都转行学UI设计了,为什么呢?
  7. 【操作系统】第二章-进程的描述与控制
  8. 表格、表单、HTML标记语言以及使用canvas来画图 input新属性
  9. FPD LINK III的同轴POC电路布局布线
  10. SAAS系统和ERP区别?