首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中查找整数中的中间位数

在Java中查找整数中的中间位数
EN

Stack Overflow用户
提问于 2017-05-05 07:16:18
回答 4查看 14.3K关注 0票数 4

我在java "1234567“中有一个整数,我的程序在一组整数中查找中间位数,有没有比下面的代码更优化的方法?最近在java采访中被问到。

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

代码语言:javascript
复制
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.. ");

程序输出:

代码语言:javascript
复制
digits: 1234567
no of digits 7
first 0
last 6
middle 3
middle digit: 4
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-05 07:44:06

你也可以通过一次就可以做到这一点。首先将integer存储在另一个变量中。然后在一个integer中向左移动两位数字,而在另一位中只移动一个数字。

代码语言:javascript
复制
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);
票数 9
EN

Stack Overflow用户

发布于 2017-05-05 07:19:33

你的“数学”工作正常。您可以做的一件事是:在number 预付中计算数字长度(数字数),以避免“迭代”该数字两次--这样您就可以确定该数字是偶数还是奇数,而没有“迭代”该数字:

代码语言:javascript
复制
int n = 1234;
int length = (int)(Math.log10(n)+1);

1234年给你4,12345给你5。

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

代码语言:javascript
复制
String asStr = Integer.toString(123456);

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

唯一要记住的是:像'1‘、'2’、.这样的数字的字符。有不同的数值作为int 1,2,…(请参见ASCII表,其数值为“1”为49 )!

票数 8
EN

Stack Overflow用户

发布于 2017-05-05 07:33:31

这个答案有较少的代码,但在性能上不需要太多,我认为:

代码语言:javascript
复制
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");
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43798783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档