快捷搜索: 王者荣耀 脱发

判断很长的字符串能否被一个整数整除

以前的一个面试题,一直没有解决,今天突然想起来解决的办法了,用java 实现,简单介绍一下。
比如2335 除以 2 ,可以用第一个 2 % 2 = 0 ; 3 % 2 = 1 ; 余数1 加 3 ,13%2 = 1 ; 15 % 2 = 1 , 结果余数为1,不能整除。


简单的实现 ,不要见笑
代码如下:

package entity; import java.util.Scanner; import java.util.Stack; public class LongString {
         
  	private String dividend ; 	private int divisor ; 	private Scanner scanner ; 	//余数 	private int remainder ; 	//最好使用Deque 	private Stack<Character> stack ; 	public LongString(){
         
  		init() ; 	} 	public void init(){
         
  		remainder = 0 ; 		stack = new Stack<Character>() ; 		scanner = new Scanner(System.in) ; 		System.out.println("                            判断一个无限长的字符串能不能被一个数整除 :")  ; 		//接收参数 		System.out.println("请输入被除数 :")  ; 		dividend = scanner.next() ; 		System.out.println("请输入除数 :")  ; 		try{
         
  			divisor  = Integer.parseInt( scanner.next() ); 		} catch(Exception e){
         
  			System.out.println("请输入除数 :")  ; 			divisor  = Integer.parseInt( scanner.next() ); 		} 		System.out.println("被除数 :"+ dividend + "
除数      :" + divisor + "
") ; 		compute(dividend,divisor) ; 	} 	//运算 	public void compute(String dividend, int divisor){
         
  		int length = dividend.length() ; 		int divisorLength = Integer.toString(divisor).length() ; 		//将字符串压入栈,方便进行运算时一个一个的取出来进行运行 		for(int i = dividend.length() - 1 ; i >= 0 ; i --){
         
  			stack.push(dividend.charAt(i) ) ; 		} 		//如果被除数的长度小于或等于除数的,直接转换进行运算 		if(length <= divisorLength ){
         
  			 remainder = Integer.parseInt( dividend ) % divisor ; 		} else { //如果被除数长度大于除数的,从高位开始依次进行运算,直到最后 			//构建一个临时的被除数 			StringBuilder sbDividendTemp = new StringBuilder() ; 			for(int i = 0 ; i < length ; i++){
         
  				sbDividendTemp.append(stack.pop()) ; 				//如果临时被除数取出的被除数小于除数,继续从被除数中取 				if( Integer.parseInt( sbDividendTemp.toString() ) < divisor ){
         
  					continue ; 				} 				//把余数写入被除数,继续判断 				else {
         
  					remainder = Integer.parseInt( sbDividendTemp.toString()) % divisor ; 					sbDividendTemp.delete(0, sbDividendTemp.length()) ; 					if (remainder != 0 ) {
         
  						sbDividendTemp.append(Integer.toString(remainder)); 					} 				} 			} 		} 		//对结果进行判断 		if(remainder == 0 ){
         
  			System.out.println(" 可以整除" ) ; 		} else{
         
  			System.out.println(" 不能整除  ,余数是 :"  + remainder ) ; 		} 	} 	public static void main(String[] args){
         
  		new LongString() ; 	} }
经验分享 程序员 微信小程序 职场和发展