不同的方法可以得到同样的效果(编程之美)

     我们再刚开始学习语法,肯定会去找很多题目去练手,那么你也许会遇到这样一个问题:
    1.键盘录入一个整数(正数或者负数都可以,但是符号位不算有效的数字位)
	2.定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回
	3.在main方法中打印该数字是几位数
	4.演示格式如下:
		(1)演示一:
			请输入一个整数:1234
			控制台输出:12344位数字
		(2)演示二:
			请输入一个整数:-34567
			控制台输出:-345675位数字
我们常规的思想可能就是拿这个数字一直除以10,降次一样的思想,设置计数器count = 0;如果该数字除以10=0,那么继续进行降次循环,并且计数器的值加一。最后,计数器的值就是这个数字的位数。
代码如下:
public static int print(int a) {
		int count = 1;
		while(a/10!=0) {
			a=a/10;
			count++;
		}
		return count;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入一个整数:");
		int number = scanner.nextInt();
		int bit;
		bit = print(number);
		System.out.println("控制台输出:"+number+"是"+bit+"位数字");
		
	}
	我在拿到这样的题目的时候,刚开始想到的就是这样的思想,也做出来
	结果了。但是同时我也在考虑有没有更好更快的算法可以解决这个问题
	。这个时候灵机一动,想到了String,我只要把这个数字转换成字符串,
	然后调用字符串的length方法,不就可以获取到这个字符串的长度,不
	就是该整数的长度了吗?(这样还是有一个问题,后面会介绍)
	那么现在的主要的任务就是将数字转换成字符串了。学习JAVA的人
	都会遇到数据类型自动转换的时候吧,我将这个数字加上一个空字符串。
	(数字+"")这样数字就自动转换成字符串了。再调用字符串的length
	方法就可以拿到长度,也就是位数了。但是这样还有一个很大的问题,
	如果我输入的是正整数的时候,这样结果是对的,但是如果我输入的是
	一个负整数的话,那么将前面的符号位也变成了字符串中的一个字符,
	这样返回的位数就会比实际大于1,这时候我么就得去判断了,如果是负
	数的话,我们还要将这个多余的1(符号位产生的)减掉。这样结果就是
	正确的了。
	代码如下:
	public static int getReturn(int num){
		if(num>=0){
			return (num+"").length();
		}
		else{
			return (num+"").length()-1;
		}
		
	}
	public static void main(String[] args) {
		System.out.println("请输入一个整数:");
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		int c = getReturn(num);
		System.out.println(num+"是一个"+c+"位数");
		sc.close();
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值