我在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
答案 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);