整数分解5.3.2

                                               题

 前面写过逆序的

最后一个数后面不要有空格

#include <stdio.h>int main()
{int x;scanf("%d",&x);int d;do{d=x%10;printf("%d",d);if(x>=10){printf(" ");}x/=10;}while(x>0);printf("\n");return 0;
}

 

现在这个是逆序的    

x%10如果到只剩个位时 后面再取余就等于0了所以是最后一位     这时用if语句限制这个条件就可以做到最后一个数后面没有空格。

把他正序思路也很简单,就是先给他逆序过去  再逆序过来  逆逆得正

#include <stdio.h>int main()
{int x;scanf("%d",&x);int t=0;do{int d=x%10;t=t*10+d;x/=10;}while(x>0);printf("x=%d,t=%d\n", x, t);x=t;do{int d=x%10;printf("%d",d);if(x>=10){printf(" ");}x/=10;}while(x>0);printf("\n");return 0;
}

但这种逆序两次的方法不能适用于末位数为零的数字

如果末位为零就会这样  就得换种方法        太难了  不会。。。。。

#include <stdio.h>int main()
{int x;scanf("%d", &x);int mask = 1;int t = x;while(t>9){t /= 10;mask *=10;}printf("x=%d, mask=%d\n", x, mask);do {int d = x / mask;printf("%d", d);if (mask>9){printf(" ");}x %= mask;mask /=10;}while( mask > 0 );printf("\n");return 0;
}

 

 这个就是最终改进的     下面一步一步来理解

    思路1  x=12345
2  12345/10000  ->1
3  12345%10000  ->2345
4  10000/10     ->1000
5  2345/1000    ->2
6  2345%1000    ->345
7  1000/10      ->100
8  345/100      ->3
9  345%100      ->45
10 100/10       ->10
11 45/10        ->4
12 45%10        ->5
13 10/10        ->1
14 5/1          ->5
15 5%1          ->0
16 1/10         ->0此时第 2,5,8,11,14行的就是要求的结果

这就是一个循环   输出那几行的数就是答案

#include <stdio.h>int main()
{int x;
//	scanf("%d", &x);x=12345;int mask=10000;do{int d = x / mask;x %= mask;mask /=10;printf("x=%d,mask=%d,d=%d\n", x, mask, d);}while(x>0);printf("\n");return 0;
}

 这是第一步   求出每一位的数字   d就是要求的结果

但这个写法是错误的对一些边界就不能用了    上面这个写法是错的

错误原因以70000为例    
70000/10000   ->7
70000%10000   ->0
这里第二个数就是0了下面就没法再算了
而while的条件是x>0   这时候就直接输出了
但这时候mask它并不是零   等到mask为零的时候就对了所以要把while的条件改为mask>0;

 

就会得到这样的答案。

 

这就是改过之后的结果  是符合的   

下一步

#include <stdio.h>int main()
{int x;
//	scanf("%d", &x);x=70000;int mask=10000;do{int d = x / mask;printf("%d", d);if(mask>0){printf(" ");}x %= mask;mask /=10;//	printf("x=%d,mask=%d,d=%d\n", x, mask, d);}while(mask>0);printf("\n");return 0;
}

里面加了一个加空格的if语句   if语句的条件也和上面的那个一样  如果还是x>0的话那就只有第一个数后面有空格  这样就错了

下一步

现在程序的mask是一个固定的数值   输入的x不是固定的可以是任意位数   mask对应几位数就要为该位数的最小数10  100 1000....  这时候就要找一个能根据x的不同让mask与他保持同位数的方法

计算整数的位数

 

#include <stdio.h>int main()
{int x;
//	scanf("%d", &x);x=70010;int cnt = 0;do{x/=10;cnt++;}while(x>0);printf("cnt=%d\n", cnt);int mask = 10000;do{int d = x / mask;printf("%d", d);if(mask>0){printf(" ");}x %= mask;mask /=10;//	printf("x=%d,mask=%d,d=%d\n", x, mask, d);}while(mask>0);printf("\n");return 0;
}

理解加入一个变量cnt   让他来表示位数
让x/=10来一次次减少他的位数  然后累加cnt就得到了x是几位数

 表示mask   可以引入pow函数   但不建议用    #include <math.h>

                                                                          pow

还没学

另外一种方法 思路清晰简单  就是让初始变量mask=1;然后让它加到上面那个算几位数的循环里

让他每循环一次乘于一次10就好了,

#include <stdio.h>int main()
{int x;	scanf("%d", &x);
//	x=70010;int cnt = 0;int mask = 1;do{x/=10;mask *=10;}while(x>0);printf("mask=%d\n", mask);
//	int mask = 10000;do{int d = x / mask;printf("%d", d);if(mask>0){printf(" ");}x %= mask;mask /=10;//	printf("x=%d,mask=%d,d=%d\n", x, mask, d);}while(mask>0);printf("\n");return 0;
}

  就是上面这样       然后你会发现它多了一个0       .。。。。。。。。。。。。。。。。。。。

                                                              

这样也是错的。。。。。。。。。。。。。。。 可以在循环后面给mask除去一个10   .。。/。。/

也可以把这个循环里面的条件x>0改为x>9这样是应为它一直除到只剩个位数的时候结果就小了不满足循环条件了 就少了一遍循环 位数就对了    但这种方法不能以偏概全   这种错误的由来自do-while循环本身的·特性    他是先执行一遍再判断循环  所以多了   

这时候就要换while循环

#include <stdio.h>int main()
{int x;	scanf("%d", &x);
//	x=70010;int mask = 1;while(x>9){x /= 10;mask *=10;}printf("mask=%d\n", mask);
//	int mask = 10000;do{int d = x / mask;printf("%d", d);if(mask>0){printf(" ");}x %= mask;mask /=10;//	printf("x=%d,mask=%d,d=%d\n", x, mask, d);}while(mask>0);printf("\n");return 0;
}

 

这时候mask的值就能确保是正确的    但你发现  下面输出的结果已经错很久了 

原因 在上面第一个循环输出x的值

 你会发现此时的x的值已经被替换了,所以还要引入一个变量让他等于x  让这个新引入的变量代替第一个循环体中的x    

#include <stdio.h>int main()
{int x;	scanf("%d", &x);
//	x=70010;int mask = 1;int t = x;while(t>9){t /= 10;mask *=10;}printf("t=%d,mask=%d\n", t, mask);
//	int mask = 10000;do{int d = x / mask;printf("%d", d);if(mask>0){printf(" ");}x %= mask;mask /=10;//	printf("x=%d,mask=%d,d=%d\n", x, mask, d);}while(mask>0);printf("\n");return 0;
}

 

至此 所有的问题就都解决了

最后再优化一下

#include <stdio.h>int main()
{int x;	scanf("%d", &x);int mask = 1;int t = x;while(t>9){t /= 10;mask *=10;}do{int d = x / mask;printf("%d", d);if(mask>0){printf(" ");}x %= mask;mask /=10;}while(mask>0);printf("\n");return 0;
}

 

 很多细节很重要   比如循环条件的选择    对一些语句特性的理解     某些多次要运用的变量在哪里被用过之后数额是否发生变化   

最重要的是思维  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403965.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络:基于OS的网络架构

Linux网络&#xff1a;OS视角下的网络架构 网络分层模型OSI 七层模型TCP/IP 五层模型 协议操作系统与网络网络相关命令ifconfigpingnetstat 本博客将基于操作系统&#xff0c;讲解计算机网络的设计理念&#xff0c;帮助大家理解操作系统与网络之间的关系。 网络分层模型 网络…

Positional Encoding | 位置编码【详解】

文章目录 1、位置编码的2种方案2、位置编码3、公式详解 &#xff1a; 绝对位置 、 相对位置4、代码4.1 代码14.2 代码2 1、位置编码的2种方案 transformer的作者刚开始说固定的位置编码和可学习的位置编码的效果是差不多的&#xff0c;后来证明可学习的位置编码没有太大的必要&…

系统工程与信息系统(上)

系统工程 概念 【系统工程】是一种组织管理技术。 【系统工程】是为了最好的实现系统的目的&#xff0c;对系统的组成要素、组织结构、信息流、控制机构进行分析研究的科学方法。 【系统工程】从整体出发、从系统观念出发&#xff0c;以求【整体最优】 【系统工程】利用计算机…

Oracle 12.2集群搭建遇到ORA-ORA-15227,ORA-15031,ORA-15018问题处理

报错&#xff1a; [FATAL] [DBT-30056] Labeling of disks failed. ORA-15227: could not perform label set/clear operation ORA-15031: disk specification /dev/asmdisk/ocr01 matches no disks [FATAL] [DBT-30002] Disk group OCR creation failed. ORA-15018: diskgrou…

(javaweb)SpringBootWeb案例(毕业设计)案例--部门管理

目录 1.准备工作 2.部门管理--查询功能 3.前后端联调 3.部门管理--新增功能 1.准备工作 mapper数据访问层相当于dao层 根据页面原型和需求分析出接口文档--前后端必须遵循这种规范 大部分情况下 接口文档由后端人员来编写 前后端进行交互基于restful风格接口 http的请求方式…

K8s部署安装

一.K8s简介 Kubernetes&#xff08;通常缩写为K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、扩展和管理。它最初由Google开发&#xff0c;现在由云原生计算基金会&#xff08;CNCF&#xff09;维护。Kubernetes 的核心目标是提供一个一致…

奇迹世界2单机版安装教程+GM工具+无虚拟机

今天给大家带来一款单机游戏的架设&#xff1a;奇迹世界2单机版。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xff0c;绝对是完整…

中职物联网实训室

一、中职物联网实训室建设背景 在当今科技日新月异的浪潮中&#xff0c;物联网技术以其迅猛的发展势头&#xff0c;成为了撬动数字化转型的关键杠杆&#xff0c;深刻地重塑着经济社会的面貌。面对这一变革&#xff0c;社会对精通物联网技术的应用型人才需求激增。鉴于此&#x…

Linux-DNS域名解析服务

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 1.Linux网络设置 2.LinuxDHCP服务 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言提示&#xff1a;以下是本篇文章…

职业教育嵌入式实验室|嵌入式系统实验室|嵌入式实训室建设方案

一、建设背景 在数字化浪潮的推动下&#xff0c;我们已迈入一个以信息技术为主导的崭新时代。在这个时代&#xff0c;嵌入式系统不仅是智能设备和应用的核心&#xff0c;更是推动各行各业创新和变革的关键力量。无论是智能家居的便捷生活体验&#xff0c;工业控制的精确操作&a…

Kafka运行机制(一):Kafka集群启动,controller选举,生产消费流程

前置知识 Kafka基本概念https://blog.csdn.net/dxh9231028/article/details/141270920?spm1001.2014.3001.5501 1. Kafka集群启动 Kafka在启动集群中的各个broker时&#xff0c;broker会向controller注册自己&#xff0c;并且从controller节点同步集群元数据。 broker是Kaf…

《深入浅出多模态》(九)多模态经典模型:MiniGPT-v2、MiniGPT5

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

数字化转型对金融服务业的影响

数字化转型正在塑造每个行业&#xff0c;从快速消费品到金融&#xff0c;每个行业都受到新兴技术的影响。 那么&#xff0c;数字化转型在金融服务中扮演什么角色&#xff1f;这对招聘前景有何影响&#xff1f; 我们探讨了数字化转型对该行业的影响、其对招聘策略的影响、数据…

Nios II的BSP Editor

1.菜单打开BSP Editor &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; 项目文件夹 -> software文件夹 -> ... _bsp文件夹 -> settings.bsp文件 2.文件打开BSP Editor 选中项目文件&#xff0c;右键&#xff0c;Nios II -> …

Nginx--地址重写Rewrite

一、什么是Rewrite Rewrite对称URL Rewrite&#xff0c;即URL重写&#xff0c;就是把传入Web的请求重定向到其他URL的过程 URL Rewrite最常见的应用是URL伪静态化&#xff0c;是将动态页面显示为静态页面方式的一种技术。比如http://www.123.com/news/index.php?id123 使用U…

初识Linux · 基本指令(1)

目录 前言&#xff1a; 基本指令 1.1 pwd 1.2 ls 1.3 mkdir cd clear 1.4 touch 1.5 ls部分补充 1.6 whoami 1.7 有关目录以及路径 前言&#xff1a; 今天是Linux系列的第一章节&#xff0c;对于Linux的主线学习大概会更新两个半月左右&#xff0c;中间穿插着算法…

SuperMap GIS基础产品FAQ集锦(20240812)

一、SuperMap iDesktopX 问题1&#xff1a;idesktopx11.2.0执行最佳路径分析为空&#xff0c;是什么原因&#xff1f; 11.2.0 【问题原因】两个站点之间的线没有连通 【解决办法】构建网络数据集时勾选“线线自动打断”&#xff0c;让线与线之间相互连通 问题2&#xff1a;…

SwiftUI 6.0(iOS 18)监听滚动视图视口中子视图可见性的极简方法

概览 在 SwiftUI 的应用开发中,我们有时需要监听滚动视图中子视图当前的显示状态:它们现在是被滚动到可见视口(Viewport)?或仍然是隐藏在“未知的黑暗”中呢? 在 SwiftUI 早期版本中为了得偿所愿,我们需要借助一些“取巧”的手段。不过,从 SwiftUI 6.0(iOS 18)开始情…

Unity动画模块 之 3D模型导入基础设置 Materials

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 还是那句话&#xff0c;用到的时候再看看&#xff0c;死记硬背不是正经的学习方法&#xff0c;但是又不得不知道一下&…