2021-04-11

题目:给一个不多于5位数的正整数.要求:
1.求出它是几位数;
2.分别输出每一位数字;
3.按逆序输出个位数字,例如原数字为123,输出321.

1.求位数

#inclede<stdio.h>
//1.求一个正整数的位数
//我们的思路是将它每次除以10后让他的位数加1,只到最后减小到0
int main()
{
int n,m;
int count=0;//设置一个计数器来计算位数
scanf("%d",&n);//输入一个正整数
m=n;//将数字赋值给m,这样计算后不会改变原来给正整数
while(m!=0)
{
m/=10;
count++;//每除以一次10,计数器加1
}
printf("%d的位数是%d\n",n,count);
return 0}

2.顺序输出每一位数

顺序输出每一位数字的话,我们的思路是依次取出它的最高位,输出最高位后,然后删掉它的最高位。
例如
输入1234我们先取出它的最高位1,用1234/1000的到1,然后用1234%1000得到234
第二次用234/100得到2,再用234%100的到34,
第三次用34/10得到3,34%10得到4,
第四次用 4/1得到4,4%1=0结束循环。
我们看到在这里面首先我们需要先得到他的位数,我们可以先利用第一问的代码求出位数

#include<stdio.h>
#include<math.h>
int main()
{
	int n, m;
	int count = 0;
	scanf("%d", &n);
	m = n;
	while (m != 0)
	{
		m /= 10;
		count++;
	}
	//先用第一问求出他的位数
	m=n;//重新赋值,保存数据
	int p=pow(10.0,count-1);//p是来看它的最大位是个位还是百位还是千位,万位等等
	while(m!=0)
	{
	printf("%d",m/p);//依次输出它的最大位数
	m%=p;//输出最大位后丢掉最大位数,让下一位成为新的最大位
	p/=10;//最大位改变后位数要往后挪一位
	}
	return 0}

3.逆序输出每一位数

我们思路和第二个题类似,只不过这时候我们要先的到最低位,然后删掉最低位
例如 输入1234
1234%10=4,1234/10=123
123%10=3,123/10=12
12%10=2,12/10=1
1%10=1,1/10=0循环结束

#include<stdio.h>
int main()
{
	int n, m;
	scanf_s("%d", &n);
	m = n;//保存数据
	while (m != 0)
	{
		printf("%d",m%10);
		m/=10;
	}
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值