产生一个数字,使得该数字的位数应为给定数组中数字的位数的最大值

时间:2018-10-11 19:09:50

标签: java

我有一个方法,应该产生一个数字,使得该数字的位数应为给定数组中数字的位数的最大值。例如,如果给定数组为{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行出现问题,请提出一种解决方法。

1 个答案:

答案 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。