java Rabin Karp算法码的double到int的有损转换

vhipe2zx  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(104)

我指的是Rabin Karp算法的代码。但是在while循环中,它给出了一个错误
从double到int的转换可能有损耗。有人能帮我解决这个错误吗?

import java.util.Scanner;

public class Main {
    static boolean rabinKarp(String text, String pattern) {
        int pLength= pattern.length();
        int n=pLength-1;
        int res=0, curr=0;
        int i=0;
        for(;i<pLength;i++)
            res+= (pattern.charAt(i)-'a'+1)*Math.pow(10,n--);
        
        n=pLength-1;  
        for(i=0;i<pLength;i++)
            curr+= (text.charAt(i)-'a'+1)*Math.pow(10,n--);
        if(res==curr)
            return true;
        n=pLength-1;
        while(i<text.length()){
            int p= Math.pow(10,n);
            int sub= (text.charAt(i-pLength)-'a'+1)*p;
            int add= (text.charAt(i)-'a'+1);
            curr= (curr-sub)*10+add;
            if(res==curr)
                return true;
            i++;
        }
        return false;    
        
    }
    
   public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String text = "abcbab";
    String pattern = "bab";
    System.out.println(rabinKarp(text,pattern));
  }

}
ccrfmcuu

ccrfmcuu1#

Math中power方法会给予你一个double,你必须手动地转换它:int p= (int) Math.pow(10,n);另请参见Calculating powers of integers

相关问题