Разделение числа и добавление нулей слева - PullRequest
0 голосов
/ 18 мая 2018

Сначала к результирующему номеру оставляются нули, пока длина не будет кратна введенному номеру (fx int a = 3 -> длина номера должна быть кратна числу 3).Затем я должен разделить число на секции длиной a (т.е. 3).


Например:

Начиная с int a = 3 и числом: 9056737152

Если число разбивается без начальных нулей, один из результирующих разделов будет иметь длину 1:

9056737152 -> 905 673 715 2

Начиная с 1 <> a, слева необходимо добавлять нули до тех пор, пока разделение не приведет к тому, что все секции имеют длину a, т.е.

009056737152 -> 009 056 737 152

009056737152 -> 009 ( секция 1 ) 056 ( секция 2 ) 737 ( секция 3 ) 152 ( секция 4 )


Далее чередующиеся секции необходимо поменять местами, затем все секции сложить вместе.Например, реверсивные секции 2 и 4 :

251 + 737 + 650 + 009 = 1647


Есть идеи?Я на первом этапе, пытаясь добавить нули с помощью:

int num = 5;
DecimalFormat df = new DecimalFormat("00000");
System.out.println(df.format(zahl));

Проблема в том, что число 5 не может быть статическим.


Другой метод:

int number = 9;      
String str = String.format("%04d", 9);  // 0009      
System.out.printf("original number %d, numeric string with padding : %s", 9, str);
  • % означает, что это инструкция форматирования.
  • 0 - это флаг, который говорит о заполнении нулями.
  • 4 обозначает длину отформатированной строки.Это гарантирует, что будет добавлено правильное число нулей
  • d для десятичного числа, что означает, что следующий аргумент должен быть целочисленным значением, например, byte, char, short, int или long.

Мне нужно изменить 04 (от форматирования - "%04d") до целого числа a.

1 Ответ

0 голосов
/ 18 мая 2018

Вот мое решение с использованием JS

const multiple = 3;
const number = 9056737152;
const strNumber = number.toString();
const zero = '0';

const needToAdd = multiple - strNumber.length % multiple;
const padded = zero.repeat(needToAdd).concat(strNumber);

const chunks = [];

for (let i = 0; i < padded.length / multiple; i++) {
  let chunk = padded.slice(i * multiple, (i + 1) * multiple);
  chunk = reverseString(chunk);
  chunks.push(chunk);
}

const sum = chunks.reduce((total, chunk) => {
  return total + parseInt(chunk, 10);
}, 0);

console.log(sum);

function reverseString(str) {
  const symbols = str.split('');
  symbols.reverse();

  return symbols.reduce((total, l) => {
    return total.concat(l)
  });
}

Надеюсь, это поможет вам.

...