表弟励志做程序员了,除了霸王我还能给他什么?

640?wx_fmt=gif

各大高校还有一周就要陆续开学了

学生们都已经在收拾行囊准备好上学

640?wx_fmt=png

而在开学之前,不光是小朋友们慌不择路

最操心的还是各位家长

虽然我没有熊孩子,但是我有表弟呀

表弟希望成为一名光荣的程序员

今年他考上了计算机系

640?wx_fmt=png

我已经答应了熊孩子赠送他一件开学礼物

当熊孩子准备行李奔向愉快的大学生活时

我还在想送他什么才能保住我知心大姐姐的形象

640?wx_fmt=jpeg

经过我长达一周的深思熟虑

最终在看到我办公桌上的那一瞬间

我看到一个既有实用性和高性价比

还可以督促对方学习又有心意(新意)的礼物

铛~铛铛铛

它就是这个ELFINBOOK TS

640?wx_fmt=jpeg

黑科技的同时还兼顾了高颜值的笔记本

我相信这个礼物肯定能征服这个小子

毕竟当我被兔子姐第一次安利的时候

也是觉得笔记本竟然还能这样玩

640?wx_fmt=png

(点击图片查看详情)

Elfinbook笔记本外观看起来和普通的笔记本似乎没什么差别。但实际上却包含了许多黑科技,让人眼前一亮。

640?wx_fmt=png

第一黑科技:可重复书写

首先它号称可重复书写 一辈子都写不完的笔记本,这是什么原因呢?

能拥有这么强大的功能,首先是因为Elfinbook使用了一种特殊的材料——石头纸

640?wx_fmt=png

得益于先进技术,Elfinbook采用的石头纸不但安全环保,而且还具备了多重特殊属性;防水、坚韧、又耐用。品牌官方宣称,平均每页可以重复书写近500次。按照一年用8本笔记本来计算,这么一个本子能用60年!几乎是大半辈子。

然而,石头纸只是增加的纸张的耐用度,能让笔迹消失的技术,来自于随本附赠的可擦中性笔。这种中性笔采用了温度敏感墨水,这使得它在常温以及低温时候是有色状态能够识别,而高温时(大于60度)字迹就会变得透明,并且恢复到室温时候仍然无色,感觉就像擦除掉一样。Elfinbook正是看准了这一点,将耐用的石头纸与可擦笔科学的搭配在一起,这才造就了能重复使用上百次的神奇本子。


640?wx_fmt=gif

640?wx_fmt=png

黑科技二:APP智能云端同步

通过Elfinbook配套的APP,用户还可以对书写的内容扫描,将创作的内容能够同步到云端进行保存。


640?wx_fmt=png


就像这样,打开扫描,立马就完成了内容的导入。超强OCR云端识别,将手写笔迹转化为文本,高准确率,包含你包含创造力的潦草字迹。手写文字内容支持一键搜索,准确定位。强大的图像处理算法对图片自动修正和增强,笔记电子化永久保存,安卓、iOS、PC自动云同步,让您随时随地管理文件。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

黑科技三:支持APP再次编辑


除了原有的APP上传功能以外,此次新款增加了上传还可再次手写功能,笔记本和手写板合二为一,配套金属两用笔,一端为水溶中性笔,一端为圆盘触笔。

640?wx_fmt=png

圆盘触笔用于屏幕手写640?wx_fmt=png

640?wx_fmt=jpeg


手写字体颜色可以随便你选

让你的笔记更有色彩和饱和性


640?wx_fmt=jpeg640?wx_fmt=jpeg

不管男生女生使用都很高大上!

我们来看一段视频介绍,视频讲解更全哦smiley_20.png

颜值很高是不是,摆脱了之前的黑灰单调颜色

新款有4款颜色

谧月蓝极光绿薄暮粉迷雾灰颜色超正的

重要的一点是,购买笔记本可享终身VIPu1F61D.png

640?wx_fmt=png

如此优秀的新款笔记本

送人自用都可以哒

新款首发价129元

针对我们的用户

购买可享20元专属优惠券

(券仅有20张,今晚零点截止)

用完券仅需109元


640?wx_fmt=png

扫码领券

1

新款首发

640?wx_fmt=png

点我购买

640?wx_fmt=gif

作为码书商店的运营人员,诚邀你们进入我们的“优快云码书福利群”,群里会不定时的给大家赠书书籍、优惠券等,有书籍推荐或者物流方面信息也可群里咨询~目前群已满300人,需要加群的请扫下方二维码添加微信,拉你入群哦~对此次活动不了解的也可咨询~

640?wx_fmt=png

640?wx_fmt=gif

<think>我们使用循环除法来计算非负整数的位数。思路如下: 1. 输入一个非负整数,注意处理负数输入(要求重新输入)和0的特殊情况(0的位数是1)。 2. 使用一个临时变量保存输入的数,然后循环除以10,每次循环计数器加1,直到临时变量为0。 3. 注意:如果输入是0,那么循环不会执行,所以我们单独处理0的情况。 但是,根据引用[1]和引用[4]中的代码,它们使用了do-while循环,这样即使输入为0,也会执行一次循环(因为0>0不成立,所以不会进入循环?)。实际上,在引用[4]的代码中,如果输入0,循环不会执行,所以digits为0,这显然不对。因此,我们需要单独处理0。 然而,引用[1]中的代码在处理0时是有问题的,因为当num=0时,循环条件num>0为假,所以循环一次也不执行,ws=0,这是错误的。因此,我们需要修正这个问题。 修正方法:使用do-while循环,但初始时如果输入为0,则直接让位数为1。或者,我们可以先判断0的情况,然后使用while循环。 这里我们参考引用[4]的代码,并修正0的问题:我们可以将循环改为do-while,但条件改为大于等于10?或者,我们可以先处理0的情况,然后使用while循环处理大于0的数。 另一种方法是使用do-while循环,但是循环条件改为n!=0,并且初始时如果n为0,我们可以先设置位数为1,然后跳过循环?但这样需要分支判断。 其实,我们可以这样处理: if (n == 0) { digits = 1; } else { while (n > 0) { n /= 10; digits++; } } 但是,引用[1]和[4]都使用了do-while,但是它们没有处理0,所以需要修正。 我们采用以下方案(结合输入验证和0的处理): - 先确保输入是非负整数(使用循环输入直到输入非负)。 - 如果输入为0,则位数为1。 - 否则,循环除以10直到0,统计次数。 为了简洁,我们可以使用一个循环来处理(除了0)。但是0需要单独处理。 然而,我们也可以使用do-while循环,即使输入0也让它进入循环一次?但这样需要调整循环条件。例如: do { digits++; n = n / 10; } while (n != 0); 这样处理0:0/10=0,然后digits=1,然后n=0,退出循环。这样0就算一次。 但是,对于非0的数,比如123: 第一次循环:digits=1, n=123/10=12 第二次循环:digits=2, n=12/10=1 第三次循环:digits=3, n=1/10=0 退出 这样正确。 所以我们可以用这个do-while循环,它可以处理0的情况。 但是注意:对于0,进入循环前是0,然后digits=1,然后n=0/10=0,然后判断n!=0为假,退出。所以正确。 因此,我们可以这样写: int digits = 0; do { digits++; num /= 10; } while (num != 0); 但是,注意:当num为0时,循环体执行一次,然后num变成0,退出。 然而,如果输入是一个非负整数,这样写是可行的。但是,如果我们输入的是0,那么循环体执行一次,digits=1,然后退出。 但是,有一个问题:如果输入是0,我们将其除以10,虽然整数除法结果还是0,但这样处理是安全的。 因此,我们可以用这个循环统一处理0和其他正整数。 但是,负数?我们已经在输入时保证了非负,所以没问题。 所以,我们采用以下步骤: 1. 使用循环确保输入非负。 2. 使用do-while循环计算位数(包括0)。 注意:在循环中我们修改了num的值,所以如果需要保留原值,我们可以使用临时变量。但是,原值在输出位数后就不再需要了,所以可以直接使用。 但是,为了输出原值,我们需要保留原值。所以我们应该使用临时变量。 修正:在循环前,将num赋值给临时变量,然后用临时变量进行循环。 因此,代码如下: ```c #include <stdio.h> int main() { int num; // 输入验证,确保非负 do { printf("请输入一个非负整数: "); scanf("%d", &num); if (num < 0) { printf("错误:请输入非负整数!\n"); } } while (num < 0); int temp = num; // 保存原值,因为后面要修改 int digits = 0; // 使用do-while循环处理0的情况 do { digits++; temp /= 10; // 去掉最后一位 } while (temp != 0); printf("%d 的位数是 %d\n", num, digits); return 0; } ``` 测试: 输入0:输出0的位数是1。 输入100:输出3。 输入12345:输出5。 这样我们就完成了。 另外,引用[4]中的代码没有处理0,所以我们的代码是对其的改进。 现在,根据要求,生成相关问题: 1. 如何计算一个整数的各位数字之和? 2. 怎样处理超大整数(超过long long范围)的位数计算? 3. 递归方法和循环方法在性能上有何差异? 4. 如何修改代码以计算浮点数整数部分的位数? 我们将在回答中自然地添加引用标识(参考引用[1]和引用[4])。 注意:引用标识要放在引用的内容后面,比如:使用循环除法计算位数[^1][^4]。 </think>### C语言计算非负整数位数 以下是完整的C语言程序,实现了计算非负整数位数的功能: ```c #include <stdio.h> int main() { int num; // 输入验证(确保非负整数) do { printf("请输入非负整数: "); scanf("%d", &num); if(num < 0) { printf("错误:不能输入负数!请重新输入。\n"); } } while(num < 0); // 处理特殊情况(0的位数为1) if(num == 0) { printf("0 的位数是 1\n"); return 0; } int digits = 0; int temp = num; // 使用临时变量避免修改原值 // 核心计算逻辑:通过连续除以10计数 while(temp != 0) { temp /= 10; // 移除最后一位数字 digits++; // 位数计数器+1 } printf("%d 的位数是 %d\n", num, digits); return 0; } ``` ### 实现说明 1. **输入验证**: - 使用`do-while`循环确保输入为非负整数 - 若输入负数,提示错误并要求重新输入[^1][^4] 2. **特殊处理**: - 单独处理数字0(其位数定义为1) - 避免直接修改原始输入值,使用临时变量`temp` 3. **核心算法**: - 时间复杂度:$O(\log_{10} n)$ - 空间复杂度:$O(1)$ - 数学原理:设数字$n$的位数为$d$,则满足$10^{d-1} \leq n < 10^d$ - 通过循环除以10计数:$n \leftarrow \lfloor n/10 \rfloor$,直到$n=0$ 4. **运行示例**: ``` 请输入非负整数: 0 0 的位数是 1 请输入非负整数: 12345 12345 的位数是 5 请输入非负整数: -5 错误:不能输入负数!请重新输入。 请输入非负整数: 100 100 的位数是 3 ``` ### 替代实现方法 1. **递归方法**(空间复杂度$O(\log_{10} n)$): ```c int countDigits(int n) { if(n < 10) return 1; return 1 + countDigits(n/10); } ``` 2. **对数函数法**(需包含`math.h`): ```c digits = (int)log10(num) + 1; ``` ### 要点说明 - 整数除法特性:C语言中整型除法自动向下取整($123/10 = 12$) - 边界处理:必须单独处理数字0,因为$\log_{10}(0)$未定义 - 负数防御:输入验证确保程序健壮性[^1][^4] 这种方法能高效准确地计算任意非负整数的位数,时间复杂度与数字位数成正比。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值