求格式化字符算法一个

jiangchuandong 2007-03-27 02:14:13
//想格式化数据为数据加字符的方式,如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++;
}
...全文
310 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
petshop4 2007-04-10
  • 打赏
  • 举报
回复
的确 会笔算进制转换就会做的了
he_8134 2007-03-29
  • 打赏
  • 举报
回复
会笔算进制转换就会做的了~~~~
Tensionli 2007-03-29
  • 打赏
  • 举报
回复
看看吧
ufoteam 2007-03-29
  • 打赏
  • 举报
回复
jiangchuandong 2007-03-27
  • 打赏
  • 举报
回复
ok,我試試
RexZheng 2007-03-27
  • 打赏
  • 举报
回复
楼主就是三十四进制,其实用我那个改一下就行了,只是我在上班没时间改
楼主的三十四进制的表示方法为
0-33对应
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z

我以前做的特殊一些
十进制1-26分别对应
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
所以我刚开始的时候忘了这个问题,上面写的那个错得很厉害,但是原理是相通的
yucong 2007-03-27
  • 打赏
  • 举报
回复
up
honkerhero 2007-03-27
  • 打赏
  • 举报
回复
晕,我的这个算法也不行

因为我之前是进行EXCEL的字母索引转换,所以进制是从1开始.
你这里是从0开始

你是怎么转的?说下原理
honkerhero 2007-03-27
  • 打赏
  • 举报
回复
34进制?10-》A是34进制?更不明白了
RexZheng 2007-03-27
  • 打赏
  • 举报
回复
楼主就是想做一个34进制转换
RexZheng 2007-03-27
  • 打赏
  • 举报
回复
晕,我的这个算法也不行

因为我之前是进行EXCEL的字母索引转换,所以进制是从1开始.
你这里是从0开始
honkerhero 2007-03-27
  • 打赏
  • 举报
回复
帮顶一下,不明白想干啥
CathySun118 2007-03-27
  • 打赏
  • 举报
回复
1 -> 1 ,10->A
那么100,1000呢?
RexZheng 2007-03-27
  • 打赏
  • 举报
回复
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;
}
jimh 2007-03-27
  • 打赏
  • 举报
回复
说清楚一下原理,看不明白
Red_angelX 2007-03-27
  • 打赏
  • 举报
回复
具体转换原理说清楚点 代码太乱
anzhongfeng 2007-03-27
  • 打赏
  • 举报
回复

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧