求整数位数,正序逆序输出,总计1的个数

//求任意一个整数的位数
#include<stdio.h>
int Number(int n)
{
	if(n == 0)
	{
		return 1;
	}
	int i=0;
	while(n!=0)
	{
		i++;
		n/=10;
	}
	return i;
}
//正序输出整数
//设置一个计数器count,让其等于位数函数中的返回值n
//如1234:将power设置为1000(i小于(4-1),i可以为0,1,2,3,将power进行循环乘以10,得到1000;注:i为0时,power为1。
//此时再将1234除以1000得到商为1,将n重新赋值为余数234,power除以10得到100;
//再将234除以100得到商为2,将n重新赋值为余数34,power除以10得到10;
//再将34除以10得到商为3,将n重新赋值为余数4,power除以10得到1;
//再将4除以1得到商为4,将n重新赋值为余数0.
//将上述商依次不换行输出,即为正序输出1234
//设置i为计数器进行循环,i<4,即i为0,1,2,3,共循环四次;注:如i<=count,循环五次,结果出错
void PrintOrder(int n)
{
	int count = Number(n);
	int power = 1;
	for(int i=0;i < count-1;i++)
	{
		 power *= 10;
	}
	do
	{
		printf("%d",n/power);
		n%=power;
		power/=10;
	}while(n!=0);
	printf("\n");
}
//计算一个整数中出现1的个数
//将1234除10取余,若得到的余数为1,则将计时器count加一;将n重新赋值为n除以10的商,重复以上操作,直到n为0时结束,返回计数器的值即为所求
int CountOne(int n)
{
	int count = 0;//计数器
	while(n != 0)
	{
		if(n%10 == 1)
		{
			count++;
		}
		n/=10;
	}
	return count;
}
//逆序输出该整数
//如1234:将1234除以10得到商123,余数4;再将123除以10得到商12,余数3;再将12除以10得到商1,余数2;再将1除以10得到商0,余数1;
//将上述余数依次不换行输出,即为逆序输出。结束条件为n等于0时结束。
int PrintReverse(int n)
{
	do
	{
		printf("%d",n%10);
		n/=10;
	}while(n!=0);
	printf("\n");//疑问:此处为什么使用换行,且换行输出值的下一行输出0
	return n;
}

猜你喜欢

转载自blog.csdn.net/tuji67/article/details/80381306