Excel地址

本文介绍了一个C++程序,实现从十进制到26进制的转换,避免了通常进制转换中出现的0,通过在进位时减1来保持26进制的特性。作者解释了如何修正十进制转26进制的算法,确保每个位的正确映射(0->A,25->Z)。
摘要由CSDN通过智能技术生成

 看起来像进制转换,其实有些小巧思,整个进制转换过程中没有0 而多了26

#include <iostream>
#include <math.h>
using namespace std;
long long n;
char s[1000000];
int main()
{
    cin>>n;
    int t=0;
    while(n>0){
     s[t++]='A'+(n-1)%26;//s[t++]=n%10;对应0-9 25->z即可
     //26我想要的是0Z 也就是个位中的最后一个 而我正常算会得到
     //A0的第一个 高位和低位都多了一个 按照正常算应该减1 意思是26是不可进位的 26->25所以也减一
     n=(n-1)/26;
    }
    t--;
    while(t>=0){
        printf("%c",s[t--]);
    }
    return 0;
}

问题出在每次进位的时候 即由26->27也就是Z变AA的时候 Z应该表示为0-25的最后一个 而不应该表示为A0 为了此时不发生进位 我们把26减1再mod26即可

实质是每次进位时加多了一个1

所以由十进制转回类26进制需要进行修正,即每次减1再运算,相应的下次除26取整的时候这个n也应该-1再进行运算。

映射:0->A 25->Z

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值