Чтобы расширить то, что предлагал Yuval, если вас не волнует знак числа (то есть входные значения, скажем, +3456 и -3456 должны возвращать 1000), вы можете просто использовать абсолютное значение ввода:
return Math.pow(10, Math.floor(Math.log( Math.abs(n) ) / Math.log(10))); // for input n
И если вы хотите обработать все возможные числовые значения, вы также можете обработать нулевое значение перед выполнением вычисления:
if (n == 0) // for input n
return 0;
return Math.pow(10, Math.floor(Math.log( Math.abs(n) ) / Math.log(10))); // for input n
log (0) не определено, поэтому вы не хотите выполнять вычисления, если n == 0. Вы получите забавный ответ (если вы даже получите ответ ... Я не запускал этот код ). Учитывая описание проблемы, которую вы предоставили, я думаю, что возвращение 0, когда ввод 0, имеет смысл. Ноль не в тысячах, сотнях, десятках или единицах - среди целых чисел, это его собственная категория. Таким образом, вы можете вернуть 0. Или вы можете сгенерировать исключение.