我有一个号码,例如1234567897865;如何最大化并创建99999999999999?
我是这样做的:
int len = ItemNo.ToString().Length;
String maxNumString = "";
for (int i = 0; i < len; i++)
{
maxNumString += "9";
}
long maxNumber = long.Parse(maxNumString);
什么是更好,更恰当和更短的方式来完成这项任务?
答案 0 :(得分:11)
var x = 1234567897865;
return Math.Pow(10, Math.Ceiling(Math.Log10(x+1e-6))) - 1;
要扩展下面的注释,如果此问题以十六进制或二进制表示,则可以使用移位运算符非常简单地完成
即,“我有一个数字,以十六进制表示,例如3A67FD5C;如何最大化并创建FFFFFFFF?”
我必须玩这个以确保它完全正常,但它会是这样的:
var x = 0x3A67FD5C;
var p = 0;
while((x=x>>1)>0) p++; // count how many binary values are in the number
return (1L << 4*(1+p/4)) - 1; // using left shift, generate 2 to
// that power and subtract one
答案 1 :(得分:9)
long maxNumber = long.Parse(new String('9', ItemNo.ToString().Length));
答案 2 :(得分:4)
试试这个:
int v = 1;
do {
v = v * 10;
} while (v <= number);
return v - 1;
答案 3 :(得分:1)
int numDigits = (int)Math.Ceiling(Math.Log10(number));
int result = (int)(Math.Pow(10, numDigits) - 1)
我目前没有可用的编译器,因此可能需要在此处进行一些额外的字符串/双重转换。