Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不使用数组在另一个数字中查找一个数字_Java_Arrays_Long Integer - Fatal编程技术网

Java 不使用数组在另一个数字中查找一个数字

Java 不使用数组在另一个数字中查找一个数字,java,arrays,long-integer,Java,Arrays,Long Integer,最近我参加了一次采访,采访中我被要求写一个函数,在一个数字中找到一个术语,以及它出现的次数 假设term=51,number=164518351,那么51确实在number中存在,并且出现了2次,所以返回2 我的解决方案-将数字和术语转换为字符串,将数字字符串中的术语字符串替换为“A”,然后最后计算数字字符串中“A”的数字。他让我不用字符串求解,所以我给出了一种数组方法 但他说我不能同时使用数组。所以我想知道是否还有其他方法可以做到这一点?我不想要确切的代码或算法,我只想知道我们可以采取的各种方

最近我参加了一次采访,采访中我被要求写一个函数,在一个数字中找到一个术语,以及它出现的次数

假设term=51,number=164518351,那么51确实在number中存在,并且出现了2次,所以返回2

我的解决方案-将数字和术语转换为字符串,将数字字符串中的术语字符串替换为“A”,然后最后计算数字字符串中“A”的数字。他让我不用字符串求解,所以我给出了一种数组方法


但他说我不能同时使用数组。所以我想知道是否还有其他方法可以做到这一点?我不想要确切的代码或算法,我只想知道我们可以采取的各种方法,以最小的时间复杂度来解决这个问题。

你可以试试这样的方法

int term_count = 0;
while(number > 0){
    if(number % 100 == term)
        term_count++;
    number = number/10
}
int tempTerm = term, termDigitCount = 0;
while(tempTerm > 0){
    termDigitCount++;
    tempTerm /= 10;
}

// 51 > 0 -> termDigitCount = 1
// 1 > 0 -> termDigitCount = 2
// 0 > 0 -> exit while loop
这将检查数字的最后两位是否等于术语,并忽略数字的每个单位数字继续执行此操作

像这样的

int term_count = 0;
while(number > 0){
    if(number % 100 == term)
        term_count++;
    number = number/10
}
int tempTerm = term, termDigitCount = 0;
while(tempTerm > 0){
    termDigitCount++;
    tempTerm /= 10;
}

// 51 > 0 -> termDigitCount = 1
// 1 > 0 -> termDigitCount = 2
// 0 > 0 -> exit while loop
164518351%100==51

16451835%100==51

1645183%100==51

164518%100==51

当然,这里我知道这个词是两位数字,所以我用100模。如果你不知道,你可以找到这个词的位数,然后按mod number

10^(术语中数字的数量)

你可以找到这样的数字

int term_count = 0;
while(number > 0){
    if(number % 100 == term)
        term_count++;
    number = number/10
}
int tempTerm = term, termDigitCount = 0;
while(tempTerm > 0){
    termDigitCount++;
    tempTerm /= 10;
}

// 51 > 0 -> termDigitCount = 1
// 1 > 0 -> termDigitCount = 2
// 0 > 0 -> exit while loop
最后,如果项_计数为0,则该项在数字中不出现

希望这有帮助


注:由于OP不需要精确的答案,所以该解决方案可能在语法上不正确。只是逻辑。

你熟悉从整数末尾读出单个数字的方法吗?我需要一种类似于我们可以做什么来解决它的方法。我给了字符串、数组解决方案,我的代码运行得很好,但他需要其他方法来解决这个特殊问题@请参见kaddo如果动态输入该号码会怎么样?如何编写用于此目的的静态mod division函数?如果他输入term=512,number=36512723512,你需要做的就是计算term的位数,这应该很容易。然后除以10^pow,其中pow=术语的位数。while的测试是不正确的,因为您永远不会达到0。数字应大于1^1/100将为零,因此它将退出while循环@VivekVashishta-将更新动态术语的解决方案