题目描述
用过excel的都知道excel的列编号是这样的:
a b c .... z aa ab ac .... az ba bb bc .... yz za zb zc .... zz aaa aab aac .... 分别代表以下编号:1 2 3 .... 26 27 28 29 .... 52 53 54 55 .... 676 677 678 679 .... 702 703 704 705。请写个函数,完成一个正整数到这种字符串之间的转换。
输入描述
一行表示一个正整数
输出描述
excel样式的字符串
输入输出示例
序号 | 样例输入 | 样例输出 | 说明 |
---|---|---|---|
1 | 1 | a | 输出字符串 |
2 | 26 | z | 无 |
3 | 27 | aa | 无 |
题目解析
此题为简单的逻辑题,直接写即可。通过率100%。
C++源码
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
void trans(int n, string ans) {
if (n <= 0)
return;
ans = "";
while (n>0) {
n -= 1;
char t = (n % 26) + 'a';
ans += t;
n /= 26;
}
reverse(ans.begin(), ans.end());
cout << ans << endl;
}
int main() {
int n;
cin >> n;
string ans;
trans(n, ans);
return 0;
}
python源码
def trans(n):
if n <= 0:
return
ans = ""
while n > 0:
n -= 1
t = chr((n % 26) + ord('a'))
ans += t
n //= 26
ans = ans[::-1]
print(ans)
n = int(input())
trans(n)
Java源码
import java.util.Scanner;
public class Main {
public static void trans(int n) {
if (n <= 0) {
return;
}
String ans = "";
while (n > 0) {
n -= 1;
char t = (char)((n % 26) + 'a');
ans += t;
n /= 26;
}
ans = new StringBuilder(ans).reverse().toString();
System.out.println(ans);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
trans(n);
}
}