我有一个方法,应该产生一个数字,使得该数字的位数应为给定数组中数字的位数的最大值。例如,如果给定数组为{32,145,1064},则最大单位为5,最大十个为6,最大一百个为1,依此类推。因此,产生的数字应为1165。类似的{638,245,2482}应该产生2688。 我已经完成以下操作,但是只会更新单位数字。
public void produceNumber(int[] arr)
{
int num = arr[0];
for(int i=1;i<arr.length;i++)
{
int temp = num;
while(arr[i] > 0)
{
if(arr[i] % 10 > temp % 10)
num = (num/10)*10 + arr[i]%10;//Line 10
arr[i] /= 10;
temp /= 10;
}
}
System.out.println(num);
}
第10行出现问题,请提出一种解决方法。
答案 0 :(得分:0)
您的想法很接近,但不太正确。您可以执行以下操作来达到所需的结果:
int produceNumber(int [] arr)
{
int [] amx = new int[10];
int mx = 0;
for(int i=0;i<arr.length;i++)
{
int idx = 0;
while(arr[i] > 0)
{
amx[idx] = Math.max(amx[idx], arr[i] % 10);
arr[i] /= 10;
idx++;
mx = Math.max(mx, idx);
}
}
//now build the number
int res = 0, factor = 1;
for(int i=0; i<mx;i++){
res += amx[i] * factor;
factor *= 10;
}
return res;
}
在示例中,我将数组的大小限制为10,因此我假定最大数字的长度最多为10位,但是您可以根据需要更改它。
PS:由于我是直接用C ++编写的,因此您可能需要在某些地方做一些小的更正,直到后来我才注意到它被标记为Java。