首页 > 代码库 > ACM之数论数字根
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 7*5/3=2=1*2
求高速幂的代码例如以下:
灰常实用的!
最后附上此题代码:
——- 2016.3.29晚于电子楼311
ACM之数论数字根