如何获得特定长度的最大数量

本文关键字:最大数 何获得 | 更新日期: 2023-09-27 18:29:14

我有一个数字,例如1234567897865;如何将其最大化并创建99999999999999?

我是这样做的:

        int len = ItemNo.ToString().Length;
        String maxNumString = "";
        for (int i = 0; i < len; i++)
        {
            maxNumString += "9";
        }
        long maxNumber = long.Parse(maxNumString);

处理这项任务的更好、合适和更短的方法是什么?

如何获得特定长度的最大数量

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
long maxNumber = long.Parse(new String('9', ItemNo.ToString().Length));

试试这个:

int v = 1;
do {
    v = v * 10;
} while (v <= number);
return v - 1;
int numDigits = (int)Math.Ceiling(Math.Log10(number));
int result = (int)(Math.Pow(10, numDigits) - 1)

我现在没有可用的编译器,所以这里可能需要进行一些额外的字符串/双转换。