ACM之数论数字根

先来看一道杭电的数字根问题
这里写图片描述
此题的大大意是输入一个数,如果它不是一位的数字的话,那么我们就将它的每一位都相加,相加后如果还是两位或者更多的话那么我们继续取出它的每一位数字进行相加,知道等到单个数字为止。
初次看到这道题,并没有看n的取值范围,便直接写了个int类型的,不一会就写出来了,测试,通过。然而呢,当我提交的时候才知道,正因为没有给出n的取值范围,所以你需要考虑大数的问题!
当然数论的题,常常包含着我们或许不知道的定理啊,什么的,毕竟像ACM之类的题,我们通常不能直接按照题目的叙述直接做,比如求各数字,相加等等·····当然有些题还是可以在保证时间和空间都不超的情况下,这样试试!此题也不例外,
先是两种按照题意做的第一种方法
这篇代码是我按照题意建立字符数组写的,但最坑的是题意的n只写了一个more,就是这个more让我程序卡了一天,我最初定义的字符数组长度为1000,刚好处在这个边界值上,1001都可以过,注意,注意,注意!
第二种方法
这种算法采用了递归的思想和第一种方法大同小异吧!
接下来便是才用9余数的方法去求数字根,先贴代码
下一道题将会介绍9余数:
方法一
方法二

下面这道题,则既用了数字根,也用了快速幂
看题
对于这道题,先介绍两个重要的东西
1.九余数定理:如果把一个大数的各位数字相加得到一个和,再把这个和的各位数字相加又得一个和,再继续作数字和,直到最后的数字和是个位数为止,
这最后的数称为最初那个数的“数字根”。这个数字根等于原数除以9的余数,因此这个计算过程常常称为“合九法”
此外: 概念:一个数对9求余的结果,成为九余数
有定理,某个数各个位上的数相加对九求余等于这个数的九余数。
例子:1234%9=1
(1+2+3+4)%9=1
二者相等。

2.快速幂:(同余定理)如果两个乘积除以m的余数等于这两个数分别除以m的余数积。
例如:7%3=1 5%3=2 75/3=2=12
求快速幂的代码如下:

灰常有用的!
最后附上此题代码:
这里写图片描述
扫一扫,关注号!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值