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