问题描述:
条码打印.要求是唯一的序列.中间有一个日期,最后3位为流水号.但打印的张数会超过999;
因此必须用到26个大写字母,用36进制的话3位可以表示36*36*36=46656个数字。
现在要求如下:
999以前就是普通数字(001~999),再多就开始在百位使用字母
即999的后一个数字为A00此时十位和个位还不能使用字母(平时打印会少于3600张,为了客户看起来方便),
只有在百位将Z用完后才允许在十位使用字母,十位用完才允许个位使用字母
注意事项:
1)不能重复
2)数字个数应达到46656个
3)效率不能太低
4)请在本地测试没有重复序列号
博客: http://www.cnblogs.com/shinn/archive/2008/04/22/1147473.html 给了算法思路,但他的代码有问题。
我的分析:
![[jjwt.png]](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkPIopOwhXwESaxj6tw2uhXc4k1gGn8oFMmAOBQde_mYRMGEYSWhFxq8LwnuNSiGkKgpB98VBi-zbRLW1uCxRMvxd-NrgRw71zvHClqC4vFO_UQRrbfwTITmvooqFqmqp8goOq/s1600/jjwt.png)
![[jieguo.png]](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpZtldaCyw2cpg7OVy2HPVO1atwaMsZgrdWQjqW1Abgl3bFnujbYTjuZQr_0CLkAyPozEqYDfUoktbdnkt5b6EyofthqOudCLmeCmhQvTKPCINA3Zz7VudRdVKTUXoewXI7GWf/s1600/jieguo.png)
我的代码:
/* * Created by SharpDevelop. * User: liuyk * Date: 2009-9-22 * Time: 22:05 */using System;
namespace ConvertTo36X{/// <summary>
/// 把[0-46655]转换成36进制的3位序列.
/// </summary>
public class ConvertTo36X
{private readonly char[] Char26=new char[]{'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'};
private readonly char[] Char36=new char[]{'0','1','2','3','4','5','6','7','8','9','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'};
public string ConvertNum(int num)
{if(num<0 || num>46655)
{throw new Exception("输入的数字超出范围");
}else if(num>=12960)
{string value="";
num-=12960;
char h=Char36[((int) (num/936))%36];
char t=Char36[((int) (num/26))%36];
char d=Char26[num%26];
return value+h+t+d;
}else if(num>=3600)
{string value="";
num-=3600;
char h=Char36[(int)((num%360)/10)];
char t=Char26[(int)(num/360)];
int d=num%10;
return value+h+t+d;
}else if(num>=10)
{string value="";
char h=Char36[(int)(num/100)];
num=num%100;
int t=(int)(num/10);
int d=num%10;
return value+h+t+d;
}else
{
return "00"+num;
} } } }/* * Created by SharpDevelop. * User: liuyk * Date: 2009-9-24 * Time: 17:09 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */using System;
using System.IO;
namespace ConvertTo36X{class TestConvertTo36
{public static void Main(string[] args)
{Console.WriteLine("Hello World!");
// TODO: Implement Functionality Here
ConvertTo36X xx=new ConvertTo36X();
FileStream fileName = new FileStream("Temp.txt",FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fileName);
//System.Console.WriteLine(xx.ConvertNum(46655));
for (int j=0;j<=46655;j++){
System.Console.WriteLine(j);
sw.WriteLine(xx.ConvertNum(j));
}sw.Close();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
} }}
没有评论:
发表评论