使用Golang将十进制数字转化为由A-Z(1-26)表示的形式

       标题可能有点奇怪,有人可能会认为这就是一个简单的将十进制数字转化为26进制的数字,但是问题并没有这么简单。我遇到的问题如下:

       已知一组数据的总量,也就是有多少条数据,现在需要将这组数据写入excel表格,但是在表格中只能将数据写在同一行上,这就意味着你不能构造A1-A100(如:将数据写在excel表格的第一列,共100个数据),这种方式,每一个数据要填写的位置索引很容易构造,在Golang中只需要"A" + 1、"A" + 2、"A" + 3、..."A" + 100,通过一个for循环就可以实现,但是如果将数据写在一列,则要构造出每一列的名称,excel表格中列的名称用有A-Z组成的字符串表示,并且存在列名称为AA、AAA的列,因此将A看作0也不好进行换算,经过思索,我想出了下面的解决方法,先上代码:

package main

import (
	"fmt"
)

func Div(Num int)  string{
	var(
		Str string = ""
		k int
		temp []int   //保存转化后每一位数据的值,然后通过索引的方式匹配A-Z
	)
//用来匹配的字符A-Z
	Slice := []string{"","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O",
		"P","Q","R","S","T","U","V","W","X","Y","Z"}

	if Num >26 {  //数据大于26需要进行拆分
		for {
			k = Num % 26  //从个位开始拆分,如果求余为0,说明末尾为26,也就是Z,如果是转化为26进制数,则末尾是可以为0的,这里必须为A-Z中的一个
			if k == 0 {
				temp = append(temp, 26)
				k = 26
			} else {
				temp = append(temp, k)
			}
			Num = (Num - k) / 26 //减去Num最后一位数的值,因为已经记录在temp中
			if Num <= 26{   //小于等于26直接进行匹配,不需要进行数据拆分
				temp = append(temp, Num)
				break
			}
		}
	}else{
		return Slice[Num]
	}
    
	for _,value := range temp{
		Str = Slice[value] + Str //因为数据切分后存储顺序是反的,所以Str要放在后面
	}
	return Str
}

func main()  {
    //大功告成
	for i:=1;i<200;i++{
		fmt.Println(Div(i))
	}
}

执行结果内容较多,就不展示了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值