|
|
|
|
|
|
h****n 发帖数: 1093 | 1 excel的index转换,数字 -> index
这个具体是什么题,谁能具体说说么,谢谢 | s****a 发帖数: 528 | 2 A-Z, AA-AZ - ZZ : total 27*26 possibility, so 每个位上-进位不一样
第一个是26进制,往后都是27进制 | h****n 发帖数: 1093 | | h****n 发帖数: 1093 | | h****n 发帖数: 1093 | 5 share一下我的代码,欢迎指正:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class ExcelIndexConversion
{
static int CharToInt(char c)
{
if (c < 'A' || c > 'Z')
return -1;
return (int)(c - 'A' + 1);
}
static char IntToChar(int digit)
{
if (digit < 1 || digit > 26)
return '#';
return (char)(digit + 'A' -1);
}
static int IndexToNum(String index)
{
int res = 0;
int digit = -1;
for (int i = 0; i < index.Length; i++)
{
digit = CharToInt(index[i]);
if (digit < 0) return -1;
res = res * 26 + digit;
}
return res;
}
static string NumToIndex(int num)
{
StringBuilder tmpStr = new StringBuilder();
StringBuilder resStr = new StringBuilder();
int digit;
if (num < 1)
{
resStr.Append("#");
return resStr.ToString();
}
else if (num < 27)
{
//如果只有一位要进行特别处理。。。
return IntToChar(num).ToString();
};
do
{
digit = num % 26;
tmpStr.Append(IntToChar(digit));
num = num / 26;
}while(num != 0 );
String tmp = tmpStr.ToString();
//reverse the string
for (int i = tmp.Length - 1; i >= 0; i--)
{
resStr.Append(tmp[i]);
}
return resStr.ToString();
}
static void Main(string[] args)
{
String testIndex = "AABB";
String resString;
int res = IndexToNum(testIndex);
resString = NumToIndex(res);
}
}
} | l*****a 发帖数: 14598 | 6 why 27 based?
void Get(int n)
{
stack s;
while(n)
{
int reminder=n%26;
if(reminder==0) {s.push('Z');n=n-26;}
else { s.push(char(reminder+'A'-1));n=n-reminder;}
n/=26;
}
while(!s.empty())
{
cout<
s.pop();
}
cout<
}
【在 s****a 的大作中提到】 : A-Z, AA-AZ - ZZ : total 27*26 possibility, so 每个位上-进位不一样 : 第一个是26进制,往后都是27进制
|
|
|
|
|
|