首页 > 解决方案 > 拆分数字并在左侧添加零

问题描述

首先,将 0 附加到结果数字上,直到长度是输入数字的倍数( 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);

我需要将 04 (从格式 - "%04d")更改为我的整数a

标签: splitaddzerofoldalternating

解决方案


这是我使用 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)
  });
}

希望,它可以帮助你。


推荐阅读