zoukankan      html  css  js  c++  java
  • hdu 1163 Eddy's digital Roots 【九余数定理】

    http://acm.hdu.edu.cn/showproblem.php?pid=1163

    九余数定理:

    如果一个数的各个数位上的数字之和能被9整除,那么这个数能被9整除;如果一个数各个数位上的数字之和被9除余数是几,那么这个数被9除的余数也一定是几。

    证明:

    首先10^i =99...9(i个9) +1除以9的余数=1

    所以ai*10^i除以9的余数=ai

    用a0~an表示各位数字则
    数=(anan-1an-2.a2a1a0),
     =an*10^n+an-1*10^n-1 +an-2 *10^n-2 +.a2*10^2+a1*10+a0

    除以9的余数=an +an-1 +an-2 +.+a2 +a1 +a0

     例如,3645732这个数,各个数位上的数字之和为  3+6+4+5+7+3+2=30,  30被9除余3,所以3645732这个数不能被9整除,且被9除后余数为3。

    题目大意:将一个数n的各位数字加起来,如果得到的是一个一位数,那么这个数就叫n的数根,如果是两位数或多位数,则重复这个过程,直到得到的数字是一位数。现在给出n,求n^n(这里是n的n次方,总是想当然的以为是n的平方)的数根。

    题目解析:最终的答案是小于10的,相当于各位数的和模10,可以不转化为对9取模,当余数为0时,则相当于模10余9。这样,便转化为了求各位数的和模9。这样便能运用九余数定理了。九余数定理的内容是这样的,一个数的各位之和除以9的余数等于这个数除以9的余数。

    上面说:便转换为了求各个位数的和模9,但是我并没有再代码中感觉到有这个思想。

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
    	int n,temp;
    	while(~scanf("%d",&n),n)
    	{
    		temp = n;
    		for(int i=2;i<=n;i++)
    			temp = temp * n % 9;
    		if(temp == 0)
    			printf("9
    ");
    		else
    			printf("%d
    ",temp);
    	}
    	return 0;
    }
    
  • 相关阅读:
    CSS——清除浮动
    .net 多线程之线程取消
    .net 多线程临时变量
    NPOI helper
    添加学员存储过程
    SQL-sqlHelper001
    ado.net 中事务的使用
    T-SQL 事务2
    T-SQL 事务
    T-SQL 带参数存储过程
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160223.html
Copyright © 2011-2022 走看看