C语言关于数字的经典问题

例题:给一个正整数,要求: 1.求出它是几位数; 2.按逆序输出各位数字; 3.分别输出每一位数字。

1.统计n是个几位数字
算法思想:
每次丢弃个位数字,计数器++,直到n为0;
注意:(丢弃个位:n/=10;得到个位 n%10)。

int Count(long long n)
{
	
	int tmp = 0;
	while(n != 0)
	{
		tmp++;
		n /= 10;
	}
	return tmp;
}
int main()
{
	printf("%d\n",Count(123456789));
	printf("%d\n",Count(0));//bug
	printf("%d\n",Count(-123456789));
	printf("%d\n",Count(123456789987654321));
	
	return 0;
}

测试用例,尽量详细,

	printf("%d\n",Count(123456789));
	printf("%d\n",Count(0));//bug
	printf("%d\n",Count(-123456789));
	printf("%d\n",Count(123456789987654321));

由于发现0处出现bug,故返回修改

int Count(long long n)
{
	if(n == 0)
		return 1;
	int tmp = 0;
	while(n != 0)
	{
		tmp++;
		n /= 10;
	}
	return tmp;
}

若数字为0,则直接输出;
若不为0,每次丢弃个位数字,计数器++,直到n为0。

2.按逆序输出各位数字;
算法思想:得到个位,输出个位,再丢弃个位.重复左边,直到n为0;

void ReverseShow(int n)
{
	if(n == 0)
	{
		printf("0\n");
		return;//提前结束该函数
	}
	else if(n < 0)
	{
		printf("-");
		n = -n;
	}

	while(n != 0)
	{
		printf("%d ",n%10);
		n /= 10;
	}
	printf("\n");
}
int main()
{
	
	ReverseShow(12345678);
	ReverseShow(-12345678);
	ReverseShow(0);
	return 0;
}

测试用例,由于之前的bug,本次代码做出了提前修改,引入了对于0的判断;

	ReverseShow(12345678);
	ReverseShow(-12345678);
	ReverseShow(0);

3.分别输出每一位数字
即为顺序输出每一位数字,例如1234—>1 2 3 4
算法思想:得到高位,输出高位,丢弃高位,直到为0。

void Show(int n)
{
	
	if(n == 0)
	{
		printf("0\n");
		return;                                         //提前结束该函数
	}
	else if(n < 0)                                       //负数处理
	{
		printf("-");
		n = -n;
	}
	
	int tmp = Count(n);//得到n是几位数字
	int power = (int)pow(10.0,tmp-1);//1234除以1000
	while(n != 0)
	{
		printf("%d ",n/power);//输出最高位
		n %= power;//丢弃最高位
		power /= 10;
	}
	printf("\n");
} 

int main()
{
	Show(1234567800);
	Show(-12345678);
	Show(0);
return 0;
}

测试用例


	Show(1234567800);//bug
	Show(-12345678);
	Show(0);

发现Show(1234567800)出现bug,最后两位00无法输出。
解决方法:用for循环代替while循环

void Show(int n)
{

	if(n == 0)
	{
		printf("0\n");
		return;                                         //提前结束该函数
	}
	else if(n < 0)                                       //负数处理
	{
		printf("-");
		n = -n;
	}
	int tmp = Count(n);//得到n是几位数字
	int power = (int)pow(10.0,tmp-1);//1234除以1000
	for (int i = 0;i<t;i++)
{
	printf("%d ",n/power);
	n %= power; 
	power /= 10}
	printf("\n");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值