• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 将一个给定数字的所有位相加直到数字最后只剩下一位的算法

将一个给定数字的所有位相加直到数字最后只剩下一位的算法

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了给定关键字不在字典中,给定,给定下面一列分式,不支持给定路径的格式,给定资料3介绍了s大学等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:将一个给定数字的所有位相加直到数字最后只剩下一位的算法
描述:

原题:

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.

看了一下别人的时间复杂度 O(1) 的解法:

public class Solution {
    public int addDigits(int num) {
        return num==0?0:(num%9==0?9:(num%9));
    }
}

我的理解大致如下:

假设一个数字为 abcd,那么:

(a + b + c + d) % 9
= (999a + 99b + 9*c + a + b + c + d) % 9
= abcd % 9

而 (a + b + c + d) 得到的一个数,我们假设为 n,那么

abcd % 9
= n % 9;

而 n 可以递归到直到最后只剩下一位数字,假设这个数字为 k,那么就有

result = (k % 9 == 0) ? 9 : (k % 9);

也就是说,数字 abcd 可以转化为:

result = (num == 0) ? 0 : ((num % 9 == 0) ? 9 : (num % 9));

但是总感觉理解上有一些奇怪,也不知道有没有错误,求各位大神能给出一个较为清晰的算法正确性证明。


解决方案1:

你的证明是正确的。但是再梳理一下,反过来描述可能更容易理解。

假设n>0,按照题目要求的计算步骤最后得到的结果为k,那么当且仅当k==9时k%9=0,其他情况下k%9=k。

而任何数x与它的各位数字之和y之间都满足x%9==y%9,这个结论在你的证明中已经很明确了,理解起来应该没有问题。

所以应用该结论可以得到n%9==k%9,当该结果为0时k==9,否则k==n%9。

上面是n>0的情况,当n==0时,结果当然为0。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 求给定数组中和为最大的连续子数组
  • 大量格点数中给定一个点,画半径为R的圆,得到圆中各个格点的坐标
  • 将一个给定数字的所有位相加直到数字最后只剩下一位的算法

相关文章

  • 2017-06-07 Python和C语言WindowsAPI问题请教
  • 2017-06-07 除了将项目放到github上,大家还有木有什么代码托管的好去处?
  • 2017-06-07 64位FFMPEGffmpeg合并视频必须使用mpg格式么?
  • 2017-06-07 PHP采用正则表达式提取四列数据存成数组将数据批量导入mysql数据库中
  • 2017-06-07 VC60与VC2005有什么区别?
  • 2017-06-07 Doc设置环境变量无法用osenvironget变量取出
  • 2017-06-07 jboss部署问题
  • 2017-06-07 申请绑定了自己的域名,为什么传的文件生成的外链还是七牛自己的二级域名?
  • 2017-06-07 (VFP)vf中怎样写excel中行的宽度行的高度代码
  • 2017-06-07 flask读取对象内容并封装为json

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • python爬虫针对javascript,ajax
    • 使用virtualenv创建项目时如何指定python的版本号?
    • (python)如何匹配字符串中的\\并替换成\?
    • (VFP)为什么用SpecialCells12value后返回的值少了?
    • python类嵌套定义
    • 求救:jboss5中对messaging实现认证
    • jaas如何实现的ejb30的认证?
    • python正则中文网页
    • (laravel)这个$errors有时候不存在,为什么blade不报错呢?
    • 突然想用python开发一个简单的音乐播放器,想问一下有哪些而比较好的库?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有