C语言题目:输入一个数,将它的每一位按顺序打印出来

完成这个题目,首先想想该怎么去做。

我们知道一个数对10取余可以得到个位,除以十可以去掉个位,获得十位以上的数字

比如 12%10=2 12/10 = 1

所以我们可以根据这个方法写出这个程序,但是我们的数可能是3位

也可能是5位,所以我们还要思考怎么去获得这个数高位的权重

因为1234/1000 = 1

1234 的高位为1 ,权重为1000,所以明白了吧

开始敲代码!

1.前戏🙃🙃

    int num = 0;//输入的数字
	int tem = 1;//被除数
	int count = 0;//计算一共有几位
	int num1 = 0;//备用输入的数字
	int ret = 0;//结果
	printf("请输入\n");
	scanf("%d",&num);
	num1 = num;//将输入的数字备份

这里一定要先将输入的数字备份!!

2.最高位的获得

    while(num>0)//当输入的数字大于零时执行
	{
		num/=10;//每次减少一位
		count+=1;//计数器加一
	}

当输入的数字被消耗光的时候,我们也得到了最高权重count

这就是上一步为什么要备份输入的数字!

3.主体

    for(int i=1;i<=count;i++)//外部循环负责控制和打印
	{
		for(int j=i;j<count;j++)//内部循环负责控制被除数
		{
			//计算出每一位对应的权重(十进制)
			//当i=1时,计算出1000,然后1234/1000=1
			//以此类推
			tem = tem*10;
		}
		ret = (num1/tem)%10;//结果的计算
		//用备用输入的数除以首位的权重再取余可以得到首位
		printf("%d\t",ret);
		tem = 1;//将被除数复位
	}

请看注释!!

完整代码演示

int main() {
	int num = 0, tem = 1, count = 0, num1 = 0, ret = 0;
	printf("请输入\n");
	scanf("%d", &num);
	num1 = num;
	while (num > 0) {
		num /= 10;
		count += 1;
	}
	for (int i = 1; i <= count; i++) {
		for (int j = i; j < count; j++) {
			tem = tem * 10;
		}
		ret = (num1 / tem) % 10;
		printf("%d\t", ret);
		tem = 1;
	}
}

我们可以看到 它能将我们输入的数字逐个打印出来

但是代码用了3个循环,量很大,能不能简化呢?

答案是可以的,往下翻

.

.

.

.

.

.

我们在计算最高位的权重的时候,是不是可以直接计算1000

然后下一个循环中逐个除以十呢?这样我们就直接省去了

一个循环,直接省去了许多代码,下面开始码!!

1.前戏🙃🙃

    int num = 0,count = 0,num1=0,tem=1,ret= 0;
	printf("请输入\n");
	scanf("%d",&num);
	num1=num;

跟上面的差不多

2.求高位权重

while(num>0)
	{
		count+=1;//计数器
		tem*=10;//计算最高位权重
		num/=10;//循环结束条件
	}

在这里利用求最高位的权重下面就省略一个for循环

3.主体

for(int i=1;i<=count;i++)
	{
		tem/=10;//计算下一个最高位权重
		printf("%d\t",(num1/tem)%10);
	}	

省去的只剩这点了,C语言就是要精简一点

完整代买演示

int main()
{
	int num = 0,count = 0,num1=0,tem=1,ret= 0;
	printf("请输入\n");
	scanf("%d",&num);
	num1=num;
	while(num>0)
	{
		count+=1;//计数器
		tem*=10;//计算最高位权重
		num/=10;//循环结束条件
	}
	for(int i=1;i<=count;i++)
	{
		tem/=10;//计算下一个最高位权重
		printf("%d\t",(num1/tem)%10);
	}	
}

那能不能再精简些呢

答案是可以的

这时我们可以用函数的递归来解决这个问题

void my_printf(int num)
{
	if(num>9)
	{
		//当num大于9时,说明这是两位数,将他除以十放到下一个my_printf中
		my_printf(num/10);//如此循环往复,就会<9就是最高位
	}
	printf("%d\t",num%10);//跳出来将最高位打印后开始往回走
}
int main()
{
	int num = 0;
	printf("请输入\n");
	scanf("%d",&num);
	my_printf(num);
}

 你学废了吗🙃🙃🙃

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值