栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 

请看注释!!

完整代码演示

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("%dt", 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("%dt",(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("%dt",(num1/tem)%10);
	}	
}

那能不能再精简些呢

答案是可以的

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

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

 你学废了吗

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864062.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号