在Java中查找整数的中间数字

时间:2017-05-05 07:16:19

标签: java performance

我在java“1234567”中有一个整数,我的程序在一组整数中找到中间数字,是否有比下面的代码更优化的方法?最近在java采访中问过。

我所做的是首先找不到数字,第一,最后和中间索引。然后再次找到相同整数的中间数字。请建议一些优化。

int a1 = 1234567;
int a = a1;

// calculate length
int noOfDigits = 0;
while(a!=0)
{
   a = a/10;
   noOfDigits++;
}

int first = 0;
int last = noOfDigits-1;
int middle = (first+last)/2;

boolean midExists = ((a1%2)==1);
System.out.println(" digits: "+a1);
System.out.println(" no of digits "+noOfDigits);
System.out.println(" first "+first);
System.out.println(" last " + last);

if(midExists)
{
   System.out.println(" middle " + middle);
   int i = last;
   int middleDigit = 0;
   a = a1;
   while(i != middle)
   {
     a = (a / 10);
     middleDigit = (a%10);
     i--;
   }
   System.out.println("middle digit: " + middleDigit);
 }
 else
   System.out.println(" Mid not Exists.. ");

节目输出:

digits: 1234567
no of digits 7
first 0
last 6
middle 3
middle digit: 4

4 个答案:

答案 0 :(得分:9)

您也可以一次性完成此操作。想法是首先将integer存储在另一个变量中。然后在一个integer中向左移动两位数字,而在另一个数字中仅移动一个数字。

int a1 = 1234567;  
int a2 = a1;
int flag=0;

while(a2>0)
{
    a2/=10;               //Moves to the left by one digit
    if(a2==0)             //If there are odd no. of digits
    {
        flag=1;
        break;
    }
    a2/=10;               //Moves to the left by one digit
    a1/=10;               //Moves to the left by one digit
}
System.out.print(flag!=1?"No Mid Exists":a1%10);

答案 1 :(得分:8)

您的“数学”工作正常。您可以做的一件事:计算您的号码前期中的长度(位数),以避免“迭代”两次 - 这样您就可以确定数字是偶数或奇数没有“迭代”数字:

int n = 1234;
int length = (int)(Math.log10(n)+1);

应该给你4个1234,5个给12345。

但除此之外:您可以用不同的方式表达信息。例如:您可以将 int 值转换为字符串。

String asStr = Integer.toString(123456);

现在:您可以轻松检查该字符串的长度;并且您可以直接访问相应的角色!

唯一需要记住的是:代表数字的字符如“1”,“2”,......具有不同的数值,如int 1,2,...(请参阅ASCII table;当关于其数值时,'1'为49)!

答案 2 :(得分:4)

这个答案代码较少,但我认为不会在性能上花费太多:

int a1 = 12334;
int a = a1;
int middle = 0;
int noOfDigits = 0;

while (a1 != 0) {
    a1 = a1 / 10;
    noOfDigits++;
}
if (noOfDigits % 2 == 1) {
    for (int i = 0; i < (noOfDigits / 2) + 1; i++) {
        middle = a % 10;
        a = a / 10;
    }
    System.out.println(middle);
} else {
    System.out.println("No mid existing");
}

答案 3 :(得分:1)

仅使用数学

int num = 123406789;
int countDigits = (int)Math.ceil(Math.log10(num));
int midIndex = (int)Math.ceil(countDigits/2);
int x = num / (int)Math.pow(10, midIndex);
int middleDigit = x % 10;
System.out.println(middleDigit);