我正在尝试使用任意长度的数组,并将其连接成一个数字而不添加它。例如,如果我有一个如下的数组
[ 1, 7, 12, 16, 3, 8]
我想要一个等于17121638
但不等于47
的变量。
我应该接受字符串输入并将其更改为int而不在整个输入本身上使用Interger.parseInt()
。
这是我目前的尝试:
public static String toNum(String input) {
String [] charArray = new String [input.length()];
int [] parsedInput = new int [input.length()];
for(int i; i < input.length(); i++){
charArray[i] = input.substring(i);
}
for(int c; c < charArray.length; c++){
parsedInput[c] = Integer.parseInt(charArray[c]);
}
答案 0 :(得分:3)
试试这个:
int[] nums = { 1, 7, 12, 16, 3, 8 };
StringBuilder strBigNum = new StringBuilder();
for (int n : nums)
strBigNum.append(n);
long bigNum = 0;
long factor = 1;
for (int i = strBigNum.length()-1; i >= 0; i--) {
bigNum += Character.digit(strBigNum.charAt(i), 10) * factor;
factor *= 10;
}
现在bigNum
变量包含值17121638
;在这种情况下,使用字符串更容易。请注意,如果输入数组太大(或数字太大),结果值将不适合long
。
答案 1 :(得分:1)
尝试考虑最左边数字的索引如何与你想要达到的最终数字中的10的幂相关联。例如:拥有[1, 2, 3, 4]
数组应该生成整数1234
。 1000的基数10的幂如何与数组的长度和1
的索引?
我认为这是一个问题,因为我觉得这是学校的家庭作业问题。
答案 2 :(得分:1)
ÓscarLópez的解决方案的变体,不使用任何解析(如所要求的问题):
public class BigNum {
public static void main(String[] args) {
int[] nums = {1, 7, 12, 16, 3, 8};
System.out.println(concatNums(nums));
}
public static long concatNums(int[] nums) {
long result = 0;
long multiplier = 1;
for (int i = nums.length; i > 0; --i) {
int num = nums[i - 1];
while (num != 0) {
result += multiplier * (num % 10);
num /= 10;
multiplier *= 10;
}
}
return result;
}
}
如果数组包含0,这将无法正常工作。如果这很重要,请告诉我,我会调整算法以适应它。
答案 3 :(得分:1)
通过join方法将数字加在一起-这将为您提供一个字符串,然后通过Number函数将其转换为数字。 您可以简单地运行:
var arr = [ 1, 7, 12, 16, 3, 8];
var num = arr.join('');
Number(num);
答案 4 :(得分:0)
首先,你想要返回一个int - 而不是一个String!
第二 - 从技术上讲 - 你可以使用Integer.valueOf(s);返回一个Integer对象,其中包含.parseInt()将返回的确切值...虽然我怀疑这会被视为“作弊”。
第三,我认为这将对您有所帮助:http://nadeausoftware.com/node/97
特别是标题为:
的部分使用自定义代码
解析字符串中的整数
答案 5 :(得分:0)
您可以使用StringBuilder从数字(int [])附加每个int num。
StringBuilder sb = new StringBuilder();
for (int num : numbers) {
sb.append(num);
}
return sb.toString();
答案 6 :(得分:0)
一线解决方案
String str = Arrays.toString(a).replaceAll("\\D", "");
答案 7 :(得分:0)
好的,这是另一种方法。虽然这与另一个答案相似,但是这个可以处理一些零。只是数学,不使用Integer.parseInt:
public static int intsToInt(int[] input) {
int total = 0;
int multiplier = 1;
for (int i=input.length-1; i > -1; i--) {
if (input[i] == 0) {
multiplier *= Math.pow(10, String.valueOf(input[i]).length());
}
else {
total += input[i]*multiplier;
multiplier *= Math.pow(10, String.valueOf(input[i]).length());
}
}
return total;
}
public static void main(String[] args) {
int[] ints = {1, 7, 12, 0, 16, 3, 8};
out.println(digitsToInt(ints));
out.println(intsToInt(ints));
}
答案 8 :(得分:0)
这是一个简单的实现。如果是错的请纠正(我是初学者)。
int concatArray(int[] array){
int sum = 0;
int len = array.length-1;
for(int i=0; i<array.length;i++){
sum += (Math.pow(10, len) * array[i]);
len--;
}
return sum;
}