欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-01 23:21:09
...
//求任意一个整数的位数
#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;
}