`
chengpan
  • 浏览: 44286 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
    以前的一个面试题,一直没有解决,今天突然想起来解决的办法了,用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 + "\n除数      :" + divisor + "\n") ;

		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() ;
	}
}
分享到:
评论
2 楼 chengpan 2012-07-09  
261667318 写道
哥们你这有个bug。  比如被除数  99999995,除数为9。那么最后一个数就被你continue掉了。按照你的算法,是可以被整除的。应该在

if( Integer.parseInt( sbDividendTemp.toString() ) < divisor ){
continue ;
}


加判断,   && i != length -1


罪过罪过 , 我再看看 
1 楼 261667318 2012-07-07  
哥们你这有个bug。  比如被除数  99999995,除数为9。那么最后一个数就被你continue掉了。按照你的算法,是可以被整除的。应该在

if( Integer.parseInt( sbDividendTemp.toString() ) < divisor ){
continue ;
}


加判断,   && i != length -1

相关推荐

    Java实现字符串的匹配

    假设我们有一个一定个数的字母组成字串,我给每个字母分配一个素数,从2开始,往后类推。这样A将会是2,B将会是3,C将会是5,...遍历短字符串,判断乘积能否被短字符串中的字符对应的素数整除。  4.输出结果。  

    华中科技大学程序设计基础:C++期末常用函数汇总复习

    这个函数通过循环判断一个整数是否只能被1和它自身整除,若能,则该数为质数。循环的起始值是2,因为2是质数中最小的一个数,循环到n的开方即可,因为如果n不是质数,它的因数必定有一个不大于它的开方。 求最大公...

    c语言基础练习[参考].pdf

    以上是对每个题目涉及到的C语言知识点的详细说明,它们涵盖了数组操作、字符串处理、循环控制、条件判断、函数设计、数值计算等多个核心概念,对于初学者来说是很好的练习和巩固基础知识的机会。

    全国计算机等级考试二级C语言南开一百题.pdf

    `fun`函数利用了条件判断和循环,遍历从2到1000之间的所有数,如果一个数能被7或11整除,但不能被77整除,就将其存入数组`a`,最后返回符合条件的数的个数`n`。注意,这里的1000是为了防止溢出,实际上题目要求的是...

    计算机二级C

    =0` 表示判断一个数是否能被7或11整除,但不能同时被7和11整除。这种逻辑操作在编程中很常见。 3. **数组排序与遍历**: - 第3题的`fun`函数通过遍历数组和双重条件判断,找到了所有能整除`x`且不是偶数的数,并...

    2011年计算机等级考试三级网络技术南开100题.pdf

    这个函数通过循环遍历从2到m-1的所有整数,如果m能被其中任意一个整数整除,就返回0表示m不是素数;否则,返回1表示m是素数。这是基本的素数检测方法,也被称为试除法。函数`num(int m, int k, int xx[])`则负责找到...

    华南理工大学《Java》期末复习资料.pdf

    代码从用户输入中读取一个整数,通过取余和整除操作分别得到个位、十位和百位上的数字。然后将这些数字相加得到总和,并输出结果。这里用到了`java.util.Scanner`类来获取用户输入的数据。 第二部分是关于输入三条...

    高职升本计算机C语言程序题-含答案.pdf

    11.从键盘上输入一个正整数,输出显示该正整数各位数字之和 * 知识点:输入输出语句、循环语句、累加语句 * 应用场景:计算整型变量的各个数位之和 12.输出1~1000之间满足用3除余2,用5除余3,用7除余2的数 * ...

    2010年3月计算机三级上机题目与答案.pdf

    算法逻辑为遍历从2到m-1的所有整数,如果m能被其中的任何一个数整除,则说明m不是素数,返回0。如果遍历完成都没有找到可以整除m的数,则说明m是素数,返回1。 2. num函数:该函数用于生成一系列素数并存放到数组xx...

    历年计算机三级考试题库.pdf

    它的实现是通过遍历从2到m-1的所有整数,如果m能被这些整数中的任意一个整除,那么m不是素数,返回0。如果没有任何一个数能整除m,则m是素数,返回1。这个算法叫做试除法,是最基础的素数检测方法。 2. **数组操作...

    程序设计题1-40.pdf

    5. 条件判断:文档中展示了如何使用if语句进行条件判断,例如判断字符串是否为空或者在特定位置进行条件判断等。 6. 算法实现:例如冒泡排序算法的实现,通过交换数组中的元素来对数组进行排序。这涉及到数组的操作...

    C语言程序设计上机考试题目汇编.pdf

    3. **字符串复制和重复**:题目要求创建一个新的字符串`t`,其中每个字符在原字符串`s`中都重复一次。可以使用两个嵌套的`for`循环,外层循环遍历`s`中的字符,内层循环将字符添加到`t`中,每次添加两次。 4. **...

    java 经典习题.doc

    2. **素数判断**:程序2中,通过检查一个数能否被2到其平方根之间的所有数整除来判断是否为素数。 3. **水仙花数**:程序3展示了如何遍历一个数列,检查每个数的各位立方和是否等于该数自身。 4. **质因数分解**:...

    C语言程序设计文件免费下载

    通过遍历字符串并跳过空格和制表符,当遇到非空字符时则视为一个新单词的开始,从而实现单词计数。 **代码示例**: ```c int fun(char *s) { int i = 0, k, num = 0; k = strlen(s); do { while (*(s + i) == '...

    java实用技术大全2

    1. **函数定义**:`function isdate(strDate){...}`定义了一个名为`isdate`的函数,接受一个参数`strDate`,预期这个参数是一个表示日期的字符串。 2. **变量声明**:函数内部首先声明了一系列变量,包括`...

    C语言网基础题题解汇总(含解题思路和注意要点)

    此外,字符串处理函数如`strcpy()`用于复制字符串,`strcat()`用于连接字符串,`strcmp()`用于比较字符串,`strlen()`用于获取字符串长度。 电报加密问题可以通过字符数组实现,将每个字符向后移动一位,注意处理...

    南开二级C机试编程题

    函数`fun`的目标是找出1到1000之间能被7或11整除但不能被77整除的所有整数。这不仅考验了对循环和条件语句的掌握,还涉及到数学逻辑的应用。通过`for`循环遍历指定范围内的每个数字,使用`if`语句检查是否满足条件,...

    200个经典C程序源码小游戏

    001 第一个C程序 002 运行多个源文件 003 求整数之积 004 比较实数大小 005 字符的输出 006 显示变量所占字节数 007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 ...

Global site tag (gtag.js) - Google Analytics