《算法竞赛入门经典》上机练习之习题2-1 位数

输入一个不超过109的正整数,输出它的位数。例如 12735 的位数是5。请不要使用任何数学函数,只用四则运算和循环语句实现。

想法:由于这是一个十进制数,假设数为abcd,会自然联想到abcd=a*103+b*102+c*101+d*100,所以只需判断:

1. 输入的数除以10的余数不为0

若暂时只考虑这一个条件,我们发现当数是10的整数倍时(10100...)将无法满足条件,所以必须有第二个条件:

2. 输入的数除以10不为0

当满足这两个条件之一时我们发现数必不为0,所以count+1。然后将输入的数减去一位(方法便是将该数/10),最后继续下一次循环并再次判断。

C语言代码如下:

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int count=0;
	while(n>0)
	{
		if(n%10!=0 || n/10!=0)
		{
			count++;
		}
		n=n/10;
	}
	printf("%d",count);
 } 


Java代码如下:

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {  
		Scanner cin = new Scanner(System.in);  
        int n = cin.nextInt();
        int count=0;
        while(n>0) {
        	if(n%10!=0 || n/10!=0)
        		count++;
        	n=n/10;
        }
        System.out.println(count);
    }    
}


    若有错误之处,还请海涵并敬请留言指教。欢迎留言,谢谢!

猜你喜欢

转载自blog.csdn.net/hjl_heart/article/details/79310924