我在java "1234567“中有一个整数,我的程序在一组整数中查找中间位数,有没有比下面的代码更优化的方法?最近在java采访中被问到。
我所做的是首先找到数字的no,第一,最后和中间的索引。然后在同一整数上再次找到中间位数。请提出一些优化的建议。
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发布于 2017-05-05 07:44:06
你也可以通过一次就可以做到这一点。首先将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);发布于 2017-05-05 07:19:33
你的“数学”工作正常。您可以做的一件事是:在number 预付中计算数字长度(数字数),以避免“迭代”该数字两次--这样您就可以确定该数字是偶数还是奇数,而没有“迭代”该数字:
int n = 1234;
int length = (int)(Math.log10(n)+1);1234年给你4,12345给你5。
但除此之外:你可以用不同的方式来表达信息。例如:可以将int值转换为字符串。
String asStr = Integer.toString(123456);现在:您可以轻松地检查该字符串的长度;并且可以直接访问相应的字符!
唯一要记住的是:像'1‘、'2’、.这样的数字的字符。有不同的数值作为int 1,2,…(请参见ASCII表,其数值为“1”为49 )!
发布于 2017-05-05 07:33:31
这个答案有较少的代码,但在性能上不需要太多,我认为:
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");
}https://stackoverflow.com/questions/43798783
复制相似问题