以前的一个面试题,一直没有解决,今天突然想起来解决的办法了,用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() ;
}
}
分享到:
相关推荐
顺序读入一个字符串数据(不含空格),判断能否将串中字符重新组合可以构成一个回文串。如用lvele可以构成回文串level、elvle,而用label则无法构成回文串。
# 给你一个字符串a和一个正整数n,判断a中是否存在长度为n的回文子串。 # 如果存在,则输出YES,否则输出NO。 # 回文串的定义:记串str逆序之后的字符串是str1,若str=str1,则称str是回文串,如"abcba". # 输入...
包含了常用正则表达式的使用,验证,正则表达式替换字符串,判断字符串是否为正整数,判断输入的字符串是否全是英文、中文....
把一个字符串转化为相应的整数。特别注意符号与溢出的问题。
编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,代码
String对象的方法 方法一: indexOf() (推荐) var str = "123" console.log(str.indexOf("2") !...match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 方法三: search()
delphi 判断字符串是否为整数,输入一个任意的数,包括小数等,程序将为您判断出用户输入的是否是整数,程序功能比较单一,仅此而已,是一本书中的例子。
自己编的java判断一个字符串是否对称的,忘指导。判断一个字符串是否是对称字符串(方法改进) (一个一个比较) 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
本文实例讲述了C++实现十六进制字符串转换为十进制整数的方法。分享给大家供大家参考。具体实现方法如下: /* * 将十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值 */ #include #include...
本文实例讲述了C++实现判断一个字符串是否为UTF8或GBK格式的方法。分享给大家供大家参考,具体如下: 在处理外部数据的时候,很可能因为数据格式不一样而导致乱码,甚至导致某些程序挂掉。鉴于对多数系统来说,使用...
传入一个字符串和整数m,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串并打印出来。
C代码实现超长整数字符串 相加,及相应执行程序
定义一个串类CMyString,建立适当的构造函数 字符串使用指针保存字符串 必须实现如下操作, 字符串比较、求串的长度、判断串是否为空、将串置空、 字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString...
javascript将16进制的字符串转换为10进制整数hex.docx
判断一个字符串是否是中心对称 C++描述
在JAVA里面实现判断字符串长度,和截取字符串
判断一个字符串能否只添加一个字母变成回文串,网上大多是基于动态规划实现的,这是自己写的一个暴力判断(非动态规划实现)
判断字符串是否为空判断字符串是否为空判断字符串是否为空
ES6--javascript判断一个字符串是否存在另一个字符串中
从控制台输入一串字符串,输出时,只输出其中的整数。