java求一个正整数的位数_java经典问题——求正整数的位数

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

public class Number {

int number;

State current;

int count;

int[] charInNumber;

public Number() {

current = new OneState();

}

public int getNumber() {

return number;

}

public void setNumber(int number) {

this.number = number;

}

public State getCurrent() {

return current;

}

public void setCurrent(State current) {

this.current = current;

}

public void getCount(){

current.getCount(this);

}

//求每位数字

public void getChars(){

charInNumber = new int[count];

int temp = number;

if(count >= 2){

for(int i = 0; i < count; i ++){

charInNumber[i] = temp / (getValue(count - 1 - i));

temp = temp % (getValue(count - 1 - i));

if(temp < 10){

charInNumber[i + 1] = temp;

break;

}

}

}else{

charInNumber[0] = temp;

}

}

//求十的阶乘,感觉好蠢的方法

public int getValue(int count){

int value = 1;

for(int i = 0; i < count; i ++){

value = value * 10;

}

return value;

}

}

public abstract class State {

public abstract void getCount(Number number);

}

public class OneState extends State {

@Override

public void getCount(Number number) {

if(number.getNumber() < 10 ){

number.count = 1;

number.getChars();

}else{

number.setCurrent(new TwoState());

number.getCount();

}

}

}

public class TwoState extends State {

@Override

public void getCount(Number number) {

if(number.getNumber() < 100){

number.count = 2;

number.getChars();

}else{

number.setCurrent(new ThreeState());

number.getCount();

}

}

}

public class ThreeState extends State {

@Override

public void getCount(Number number) {

if(number.getNumber() < 1000){

number.count = 3;

number.getChars();

}else{

number.setCurrent(new FourState());

number.getCount();

}

}

}

public class FourState extends State {

@Override

public void getCount(Number number) {

if(number.getNumber() < 10000){

number.count = 4;

number.getChars();

}else{

number.setCurrent(new FiveState());

number.getCount();

}

}

}

public class FiveState extends State {

@Override

public void getCount(Number number) {

if(number.getNumber() < 100000){

number.count = 5;

number.getChars();

}

}

}

public class Practise24 {

private void getResult(){

System.out.println("请输入一个不多于5位的正整数");

Scanner scan = new Scanner(System.in);

int input = scan.nextInt();

Number number = new Number();

number.setNumber(input);

number.getCount();

System.out.println(number.getNumber() + " 是 " + number.count +"位数");

System.out.println();

for(int i = number.count - 1; i >= 0; i --){

System.out.print(" "+number.charInNumber[i]);

}

}

public static void main(String[] args) {

(new Practise24()).getResult();

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值