日期:2014-05-19  浏览次数:20798 次

求格式化字符算法一个
//想格式化数据为数据加字符的方式,如1   ->   1   ,10-> A,同时去除I,O等易混字符,现在的算法在上1000的时候,格式话数据就存在问题,eg:999格式化为ZZ了,1000应该是A00  

string   strWaterNo   =   StartValue;
string   strWaterNoChr   =   string.Empty;
int   WaterNoCnt   =   0;

while   (WaterNoCnt   <   Length   -   TempDocNo.Length)
{
int   WaterNoDigit   =   int.Parse(((int.Parse(strWaterNo)   /   int.Parse(Math.Pow(32,   WaterNoCnt).ToString()))   %   32).ToString());//計算公式111/0%32,111/32%32

if   (WaterNoDigit   <   10)
{
//   WaterNoChr   =   "0 "   +   WaterNoDigit.ToString()+   WaterNoDigit.ToString();
string   strTemp   =   "0 "   +   WaterNoDigit.ToString();
strWaterNoChr   =   Convert.ToString(strTemp).Substring(strTemp.Length   -   1,   1)   +   strWaterNoChr;
}
else
{
int   intTempWaterNoDigit   =   WaterNoDigit   +   55;
int   intTempWaterCharShift   =   0;
if   (intTempWaterNoDigit   > =   72)//减少判断次数,字母I之前不用判断
{
if   (intTempWaterNoDigit   +   intTempWaterCharShift   > =   (int) 'I ')
intTempWaterCharShift   =   intTempWaterCharShift   +   1;

if   (intTempWaterNoDigit   +   intTempWaterCharShift   > =   (int) 'O ')
intTempWaterCharShift   =   intTempWaterCharShift   +   1;

if   (intTempWaterNoDigit   +   intTempWaterCharShift   > =   (int) 'U ')
intTempWaterCharShift   =   intTempWaterCharShift   +   1;

if   (intTempWaterNoDigit   +   intTempWaterCharShift   > =   (int) 'V ')
intTempWaterCharShift   =   intTempWaterCharShift   +   1;
}
strWaterNoChr   =   Convert.ToString((char)(intTempWaterNoDigit   +   intTempWaterCharShift))   +   strWaterNoChr;
}
WaterNoCnt++;
}

------解决方案--------------------

------解决方案--------------------
具体转换原理说清楚点 代码太乱
------解决方案--------------------
说清楚一下原理,看不明白
------解决方案--------------------
static char[] IntIndexToLetter(int no)
{
List <int> intArray = new List <int> ();
while (no > 0)
{
if (no % 34 == 0)
{
intArray.Add(34);
no = (no - 34) / 34;
}
else
{
intArray.Add(no % 34 + 1);
no = no / 34;
}
}
intArray.Reverse();

char[] chrArray = new char[intArray.Count];
for (int i = 0; i < intArray.Count; i++)
{
if (intArray[i] <= 10)
{
chrArray[i] = (char)(intArray[i] + 47);
}
else if (intArray[i] - 10 + 64 < (int) 'I ')
{
chrArray[i] = (char)(intArray[i] - 10 + 64);
}
else if (intArray[i] - 10 + 64 < (int) 'O ')
{
chrArray[i] = (char)(intArray[i] - 10 + 64 + 1);
}
else
{
chrArray[i] = (char)(intArray[i] - 10 + 64 + 2);
}
}
return chrArray;
}
------解决方案--------------------
1 -> 1 ,10-> A
那么100,1000呢?
------解决方案--------------------