Brian Warehouse

Some birds aren`t meant to be caged, their feathers are just too bright... ...
posts - 40, comments - 16, trackbacks - 0, articles - 1

SGU 118 Digital Root

Posted on 2010-08-19 15:35 Brian 阅读(287) 评论(0)  编辑 收藏 引用 所属分类: SGU
f(n) 是正整数n 的各位数字之和。如果 f(n) 是1位数那么n的数根就是f(n),否则f(n) 的数根就是n 的数根。举例说明:987的数根是6 (9+8+7=24 2+4=6)。你的任务是找出这样表达式的数根: A1*A2*…*AN + A1*A2*…*AN-1 + … + A1*A2 + A1。

输入包含K个测试样例。输入第一行会给出 K (1<=K<=5)。每个测试样例占一行。这一行的第一个数是一个正整数N (N<=1000)。 接着是N个非负整数 (序列 A)。 均不超过109

数根(百度知道): http://zhidao.baidu.com/question/29789035.html
对于求余数的问题是我一开始就忽略了的地方,后来看了HPF的博客,才知道有这样的技巧:
   (A+B)mod C = (A mod C) + (B mod C)
   (AB) mod C = (A mod C) × (B mod C)

C编译器 , 0MS  0KB , 如果你把前两句定义变量的语句对调,将会耗费 20MS 的时间
#include <stdio.h>
int main() 
{
    
int i=0,j,K,N,temp,m;
    
long int A;
    scanf(
"%d",&K);
    
for (; i<K; i++) {
        scanf(
"%d",&N);
        m
=1;
        A
=0;
        
for (j=0; j<N; j++) {
            scanf(
"%d",&temp);
            temp
%=9;
            m
=(m*temp)%9;
            A
=(A+m)%9;
        }
        printf(
"%d\n",(A+8)%9+1);
    }
    
return 0;
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理