正序分解整数(13425--->1 3 4 2 5 )

C语言——逆序输出整数和正序分解正整数 一、逆序输出正整数 二、用函数逆序输出整数 三、 正序分解正整数 四、总结 阅读详情

目录

方案一

Step1.先学习输入13425,得出5 2 4 3 1的处理 

Step2.得出正序分解整数的方案一

方案二

step1.给出简单整数的处理方法

step2.解决整数末尾为零无法分解的问题

Step3.使mask具有普适性

法一

法二

法三


方案一

Step1.先学习输入13425,得出5 2 4 3 1的处理 

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
	int t;
	
	do{
		t=x%10;
		printf("%d",t);
		if(x>9)printf(" ");
		x /=10;
    }while(x>0);
    printf("\n");
    
	return 0;
 } 

Step2.得出正序分解整数的方案一

输入13425,输出52431后能输出1 3 4 2 5的处理(即先逆序,再逆序): 

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
    x=13425;
    
    int t=0;//t用来构建逆序过来的数 
    do{
    	int d=x%10;
    	t=t*10+d;
    	x /=10;	
    }while(x>0);
    printf("x=%d,t=%d\n",x,t);
    x=t;//为使x还能进行接下来的处理,把 
/*d=5,t=5,x=1342
  d=2,t=52,x=134;
  ......
直到d=1,t=52431,x=0时不满足x>0,从而跳出循环*/
	
	do{
		int d=x%10;
		printf("%d",d);
		if(x>9)printf(" ");
		x /=10;
    }while(x>0);
    printf("\n");
    
	return 0;
} 

当输入变成700时,最后输出不是700,而是7,因而这种先逆序再逆序的方案只适用于整数末尾没有零的情况。

方案二

step1.给出简单整数的处理方法

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
    
    
/*   13425/10000--1   1是我们需要提取出来的数 
	13425%10000--3425  提取完后取余把已提取的数删掉 
	10000/10-----1000  后续每一轮用去取余的数也要减一位 
*	3425/1000----3
	3425%1000----425
	1000/10------100
*	425/100------4
	425%100------25
	100/10-------10
*	25/10--------2
	25%10--------5
	10/10--------1
*	5/1----------5 
    5%1----------0
    1/10---------0    */
	int mask=10000;
	do{
		int d = x / mask;
		/*printf("%d",d);
		if(x>9){
			printf(" ");
		}  */
		x %=mask;
		mask /=10;
	    printf("x=%d,mask=%d,d=%d\n",x,mask,d); 
    }while(x>0);
	return 0;
}  

step2.解决整数末尾为零无法分解的问题

当输入值是70000时,发现最后得出的d=7,不成立,原因在于,当整数末尾有零时,x=0时就提前结束循环了,所以只要把while(x>0)和if(x>0)改为(mask>0)即可。此时一开始列的计算就起了作用,在写算法前给出了直观而清晰的数据变化过程,帮助我们确定循环开始和结束的条件。

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
    
    
/*   13425/10000--1   1是我们需要提取出来的数 
	13425%10000--3425  提取完后取余把已提取的数删掉 
	10000/10-----1000  后续每一轮用去取余的数也要减一位 
*	3425/1000----3
	3425%1000----425
	1000/10------100
*	425/100------4
	425%100------25
	100/10-------10
*	25/10--------2
	25%10--------5
	10/10--------1
*	5/1----------5 
    5%1----------0
    1/10---------0    */
	int mask=10000;
	do{
		int d = x / mask;
		printf("%d",d);
		if(mask>9){
			printf(" ");
		}
		x %=mask;
		mask /=10;
	    
    }while(mask>0);
	return 0;
}  

Step3.使mask具有普适性

上一步我解决了整数末尾为零不能计算的情形,接下来,要考虑如何使程序自行识别输入数字后得出mask的问题了。

法一

将问题转化成两步,利用循环计算数字位数cnt,再引进pow函数计算出mask的值。具体如下:

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
    
	int cnt=0;
	do{
		x /=10;
		cnt++;
	}while(x>0);
	int mask=pow(10,cnt-1);
	printf("%d",mask);
    
    return 0;
}  

法二

更简便的方法是,在每一轮x/10的同时,让mask一步步乘上去,如下:

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
    
	int mask=1;
	do{
		x /=10;
		mask *=10;
	}while(x>0);
	
	printf("mask=%d\n",mask);
	
	return 0;
}

但是不难发现mask总比期望值大十倍,所以我们要让这个循环少跑一轮,将while(x>0)改成(x>9);

如果直接将此计算插入的话,下一个循环要用的x的值已被破坏,所以我们要定义另一个量代替x进行mask的计算。特别注意,这个量必须放在x已被识别后赋值。

int x;
int X=x;
scanf("%d",&x);

上图是错误的!

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
	int X=x;
    
	int mask=1;
	do{
		X /=10;
		mask *=10;
	}while(X>9);
	
	printf("mask=%d\n",mask);
    
	do{
		int d = x / mask;
		printf("%d",d);
		if(mask>9){
			printf(" ");
		}
		x %=mask;
		mask /=10;
	    
    }while(mask>0);
	return 0;
}  

法三

进一步提高mask的普适性。

这样就对了吗,我们还要考虑一些边界的情况:如输入1时,我们希望mask=1,而不是10。

这个情况,其实是do while循环的特性导致的,即不管什么条件,都会进行一次循环,我们不妨改用while循环来避免,即只有当x不是一位数时才有必要进入这个循环。如下:

#include<stdio.h>

int main()
{
	int x;
	scanf("%d",&x);
	int X=x;
    
	int mask=1;
	while(X>9){
		X /=10;
		mask *=10;
	}
    
	do{
		int d = x / mask;
		printf("%d",d);
		if(mask>9){
			printf(" ");
		}
		x %=mask;
		mask /=10;
	    
    }while(mask>0);
	return 0;
}  

【C语言】 正序分解整数 【正序分解整数】 输入一个非负整数 , 正序输出它的每一位数字。例如输入 13526,则 输出 1 3 5 2 6 阅读详情

相关推荐

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件)

本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。

7z8x2c4v6b9的博客 711

正序分解整数

输入一个正整数,结果是正序输出每一个数字并且要有空格间隔,最后一个数字不允许附带空格。

m0_58630826的博客 288

海康WEB3.3控件开发包 V3.3 前端vue项目调用实时监控画面

本需求的完成离不开后端将设备映射到公网, 以及前端单独部署demo页面这个思路的转变。

hero8011的博客 1万+

C语言——正序分解整数(详细思路)

题目: 输入一个非负整数,正序输出它的每一位数字 输入:13425 输出:1 3 4 2 5 首先初步的思路: #include<stdio.h> int main() { int x = 13425; int d; //用来输出每一位数字 int mask = 10000; //用来截取位数 while( mask &...

weixin_41950078的博客 4544

基于Web的智能家居(源码+开题)

实践上,智能家居系统的普及和应用将极大改善人们的居住体验,提高生活质量,同时也有助于促进智能家居产业链的发展和完善,为社会经济发展注入新的活力。此外,本研究还将对基于Web的智能家居系统的用户体验进行深入研究,通过用户调研和数据分析,不断优化系统功能和界面设计,提升用户的使用体验和满意度。针对以上问题,本研究将综合运用物联网、云计算、大数据等新一代信息技术,通过系统架构设计、功能模块开发、安全性保障、用户体验优化等多个方面的研究工作,力求为基于Web的智能家居系统的研发和应用提供全面而有效的解决方案。

sryue06的博客 1902

模拟IC设计笔记:拆解一个经典的时钟占空比校正(DCC)电路模块,从理论到SPICE仿真

本文深入解析了时钟占空比校正(DCC)电路在模拟IC设计中的关键作用,特别是在高速ADC应用中。通过晶体管级拆解,详细介绍了基于电荷泵和积分器的模拟反馈型DCC电路设计,包括占空比检测、误差放大与校正执行单元的实现。文章还提供了SPICE仿真验证方法,确保电路在100MHz时钟下的稳定性和性能。

weixin_33725722的博客 425

初学c语言02——正序分解整数

首先这是第一个方法,相较于逆序分解,它多加了一段do-while循环,将t转换为原本a的逆序,再将其分解,所以可以基于前面逆序分解更加好了解。所以最近上完课后,我会敲这个代码三道四次,因为教的方法有许多嘛,所以我尽量还是将所有的方法去了解和练习,比如之前学过逆序分解整数,这次延伸正序,还是有一些不同的,下面我展示我自己学到的两种方法。这样子就可以得到整数正序的分解,在写代码时,我也会发现 很多地方逻辑不清会使结果有了千差万别,所以今后的练习中,会更加清晰变量和表达式的逻辑,不使张冠李戴,不让自己逻辑混乱。

2302_77683642的博客 367

Bash Shell 系统巡检脚本

部分安全相关检查需要root权限,建议通过sudo运行完整检查。

老韩的Linux云计算架构师进阶之路 96

C语言水平测试题 过关斩将(3)辗转相除法,前n项求和,整数的正序分解,求最大公约数

个人主页我的专栏下列是:C语言水平测试题(3)大家冲鸭!

光之梦的博客 535

基于pytorch cnn ResNets卷积网络的模糊图像检测 完整代码数据直接运行

基于pytorch cnn ResNets卷积网络的模糊图像检测 完整代码数据直接运行

730

电磁场仿真软件:Sonnet_(12).Sonnet与其他软件的集成

Sonnet作为电磁场仿真领域的强大工具,不仅能够独立完成复杂的仿真任务,还可以通过与其他软件的集成,实现更高效的工作流程和更广泛的功能扩展。通过与CAD、EDA、数据处理软件、MATLAB、Python以及云计算平台的集成,Sonnet用户可以更好地利用现有设计资源,进行参数优化和结果分析,从而提升设计和仿真效率。希望本节的内容能够帮助你更好地理解和应用Sonnet的集成功能。

kkchenjj的博客 1432

MOOC | 翁恺 | 第5周编程练习 | 循环控制 | 循环应用 | 课中 | 正序分解整数

题目要求:输入一个非负整数,正序输出它的每一位数字。输入示例:13425。输出示例:1 3 4 2 5

m0_71998323的博客 427

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能

使用xlwings在Python中对Excel表格进行操作是非常方便的,可以实现自动化处理、批量数据处理等功能。本篇文章主要介绍如何使用xlwings对Excel表格进行多行多列数据设置和操作,并给出相应的源代码。接着,我们可以对这个范围内的所有单元格进行操作,如设置字体颜色、填充颜色、对齐方式等。以上就是使用xlwings对Excel表格进行多行多列数据操作和设置字体颜色、填充色和对齐方式的全部内容。最后,我们可以将数据写入到单元格中,也可以从单元格中读取数据。在Excel中,可以通过。

BUG?不存在的! 712

课堂5.3.3整数分解(这堂课的分析、调试非常精彩,值得反复观看)

慕课课程,浙大翁恺老师讲授的《程序设计入门——C语言》,第五周:循环控制,5.3.3整数分解

lxw的博客 130

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C语言笔记 10

起点终点数字已知,用for循环最合适int n;int i;for ( i=1;i<=n;i++ ) {法一法二。

2401_87749224的博客 1474

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

如何进行整数分解

输入一个非负整数,正序输出它的每一位数字。

2401_83165371的博客 394

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C语言 整数分解 代码 C语言代码

1.整数分解代码 #include<stdio.h> int main(){ /* 13425 / 10000 ->1 13425 % 10000 ->3425 10000/10 ->1000 3425 / 1000 ->3 3425 % 1000 ->425 1000 /10 ->100 425 / 100 ->4 42

flyingMMM的博客 846

c[day3]

求和 #include<stdio.h> int main() { int n; double sum=0.0,sign=1.0; scanf("%d",&n); for(int i=1;i<=n;i++) { sum+=sign/i; sign=-sign;//变号 } printf("f(%d)=%f",n,sum); return 0; } 正序分解整数 输入一个非负整数,正序输出它的每位数字 输入:13425 输出:1 3 4 2 5

qq_44959965的博客 141

C语言编程练习

猜数字游戏是令系统随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果在到达N次之前,用户输入了一个负数,也输出"Game Over”,并结束程序。输入第一行中给出2个不超过100的正整数,分别是系统产生的随机数、以及猜测的最大次数N。水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。如果b等于,计算结束,a就是最大公约数;

qq_44956482的博客 805

第五周:循环控制

这样循环的次数是n,而循环次数结束以后,i的值是n。循环的控制变量i,是选择从0开始还是从1开始,是判断 i

小余的前端博客 1005

C语言重来29:例题赏析——整数分解

C语言重来29:例题赏析——整数分解

m0_74131807的博客 288

7-15 输出整数各位数字(2022-高级语言程序设计练习——循环结构程序设计)

用C语言实现PTA程序设计题7-15 输出整数各位数字(2022-高级语言程序设计练习——循环结构程序设计)

HYGGE0722的博客 1334

C语言程序设计CAP——C语言学习笔记(五) 下

循环应用

weixin_50132000的博客 878

C语言程序入门——b站翁恺C语言教程练习题记录(2)

备注:经测试仅有方案三具备处理末尾为零以及中间为零的数字,另外编写形式存在逻辑混乱情况,具备较大优化空间。要求:输入为一个非负整数,正序输出它的每一个数字。题目名称为:正序分解整数。输出:1 3 4 2 5。

m0_50901007的博客 249

C

素数 判断素数 int x; scanf("%d", &x); int i; int isprime = 1; //x是素数 for ( i = 2; i < x; i++ ) { if ( x % i == 0) { isprime = 0; } } if ( isprime == 1 ) { printf("是素数\n"); ...

weixin_45466551的博客 165
上一篇: 2021-09-26
下一篇: 数组(2021.10.3)
studyingbear
博客等级 码龄5年 20粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值