首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取一个数字的单个数字

获取一个数字的单个数字
EN

Code Review用户
提问于 2015-07-23 06:21:48
回答 4查看 51.1K关注 0票数 6

方法1:

重复除法模运算:

代码语言:javascript
复制
long num = 123456789;
int count = 0;
while(num > 0)
{
 int digit = num % 10;
 if(digit == 1)
  count ++;
 num /= 10;
}

方法2:

将其转换为String,并在该位置获取字符:

代码语言:javascript
复制
long num = 123456789;
int count = 0;
String s = String.valueOf(num);
for(int i = 0; i < s.length(); i++)
{
 char ch = s.charAt(i);
 if(ch == '1')
    count ++;
}

第二个运算不需要每次得到余数和商。一个charAt()方法就足够了。

哪种方法被认为更好,为什么?

考虑从控制台获取输入。

第一宗案件:

代码语言:javascript
复制
long num = scanner.nextLong();

第二宗案件:

代码语言:javascript
复制
String s = scanner.nextLine();

这里没有将number转换为string的开销。

也让我们假设这是正数。

EN

回答 4

Code Review用户

发布于 2015-07-23 09:38:22

我建议第三种方法扩展到字符串的转换方法:向List of Character的转换。

这样做的好处是您可以使用Java 8集合流特性对元素执行筛选、聚合和其他功能。

例如,您的示例可以这样表示(在@h.j.k的注释后面编辑):

代码语言:javascript
复制
    long num = 123456789;
    String s = String.valueOf(num);
    long count = s.chars()
            .mapToObj(i -> (char)i)
            .filter(ch -> ch.equals('1'))
            .count();
票数 1
EN

Code Review用户

发布于 2018-01-31 18:47:57

下面的方法允许您根据特定的索引从int值中获取特定的数字。

代码语言:javascript
复制
    public static int getSpecificNum(int number, int index) {
    int numOfDigits = 0;
    int pow = 1, test = 0, counter = 0;

//获取数字数

代码语言:javascript
复制
    while (test != number) {// once the full int is retrieved
        counter++;//<-digit counter
        pow *= 10;
        test = number % pow;//go through the entire int
    }

//位数被找到,重置所有

代码语言:javascript
复制
    numOfDigits = counter;
    counter = 0;
    pow = 1;
    test = 0;

//现在计数直到索引

代码语言:javascript
复制
    while (counter != (numOfDigits - index)) {// this is numOfDigits was needed
        counter++;
        pow *= 10;
        test = number % pow;// same thing

    }

// exp =求10的幂

代码语言:javascript
复制
    int exp = numOfDigits - (index + 1);
    exp = (int) Math.pow(10, exp);
    return test / exp;//divide and conquer  
}
票数 1
EN

Code Review用户

发布于 2019-04-10 00:56:40

如果要查找数字的长度,则不需要数组。只需使用log 10就可以得到这个数字有多少个位置,

代码语言:javascript
复制
long num = 123456789;
int length = (int) Math.log10(num); //should make the length 9

现在要得到一个特定的号码

代码语言:javascript
复制
public int getNthDigit(int number, int base, int n) {    
    return (int) ((number / Math.pow(base, n - 1)) % base);
}

如果您输入getNthDigit(num,10,8);,那么它将返回2。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/97770

复制
相关文章

相似问题

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