C语言&输出一个数是几位数,并将各个位上的数顺、逆序输出

这篇博客探讨了如何用C语言确定一个数的位数,例如输入12345会返回5。同时,文章还介绍了如何实现数字的顺逆序输出,如12345逆序输出为54321,顺序输出为12345。通过代码优化和递归调用等方法,解决了正整数在不同进制下的位数计算问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给一个数,求它是几位数?
示例:
输入:12345; 输出:5

int Count(long long number)
//定义一个long long类型的数是为了防止通不过数据特别大的测试用例
{
	int tmp=0;//统计位数,初始化为0
	if(number == 0)//考虑数为0的情况
	{
		return 1;
	}
	while(number != 0)
	{
		tmp++;
		number /= 10;//丢弃个位数字
	}
	return tmp;
}

代码优化

int Count(long long number)
{
	int tmp=0;//统计位数,初始化为0
	do//0的情况不用单独拿出来了
	{
		tmp++;
		number/=10;//丢弃个为数字
	}while(number!=0);
	return tmp;
}

拓展:特殊进制的位数
给定一个正整数,将它转化为十六进制数,它是个几位数?
思路:丢弃十六进制数的个位数字,计数器++,直到这个十六进制数字变为0.

示例1:
输入:12345678
输出:6
解释:12345678 转成十六进制为 0x BC614E,即 6 位.

示例 2:
输入:0x12345678
输出:8

示例 3:
输入:0X12AB34
输出:6

int Count(unsigned int number)
{
	int count=0;//统计位数
	do
	{
		count++;
		number/=16;//丢弃十六进制的个位数
		//求几进制的位数就/=几
	}while(number!=0);
	return count;
}

逆序输出:使用得到个位数字再丢弃个位数字的方法
示例:
输入:12345 输出:5 4 3 2 1

void ReversePrint(long long number)
{
	do
	{
		printf("%d ",number%10);//得到个位数字并打印
		number/=10;//丢弃个位数字
	}while(number!=0);
	printf("\n");
}

顺序输出:得到最高位数字然后再丢弃最高位数字
示例:
输入:12345 输出1 2 3 4 5
12345 5位数
最高位: 12345/10000(10^4)
12345%10000=2345
10000/10=1000
最高位:2345/1000(10^3)
2345%1000=345
1000/10=100

利用循环解决该问题:

void Print(long long number)
{
	if(number==0)
	//这个判0是不能缺的,否则后面pow这个库函数里面10^0==1会形成死循环
	{
		printf("0\n");//如果是0打印0
		return ;
	}
	int tmp=(int)pow(10.0,Count(number)-1);//这里需要用到math.h
	while(number!=0)
	{
		printf("%d ",number/tmp);//输出最高位数字
		number%=tmp;//求除最高位以外的剩余数字
		tmp/=10;
	}
	printf("\n");
}

递归调用解决该问题:

void Print(long long number)
{
	if(number>=10)
	{
		Print(number/10);//递归输出最高位数字
	}
	printf("%d ",number%10);//打印个位数字
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值