The digital root (also repeated digital sum) of a non-negative integer is the (single digit) value obtained by an iterative process of summing digitsios
規律題git
題意spa
定義f(n)爲n各位數字之和,若是n是各位數,則n個數根是f(n),不然爲f(n)的數根code
如今給出n個Ai,求出A1*A2*…*AN + A1*A2*…*AN-1 + … + A1*A2 + A1 這個式子的數根blog
多組數據ip
分析get
首先,要知道這樣一個結論:it
任何一個整數模9同餘於它的各數位上數字之和io
具體證實過程以下:class
設天然數N=a[n]a[n-1]…a[0],其中a[0],a[1]、…、a[n]分別是個位、十位、…上的數字
再設M=a[0]+a[1]+…+a[n]
求證:N≡M(mod 9).
證實:
∵ N=a[n]a[n-1]…a[0]=a[n]*10^n+a[n-1]*10^(n-1)+…+a[1]*10+a[0].
又∵ 1≡1(mod 9),
10≡1(mod 9),
10^2≡1(mod 9),
…
10^n≡1(mod 9).
上面這些同餘式兩邊分別同乘以a[0]、a[1]、a[2]、…、a[n],再相加得:
a[0]+a[1]*10+…+a[n]*10^n≡(a[0]+a[1]+…+a[n])(mod 9),
即 N≡M(mod 9),得證。
結論:若是x自己爲0,digitalRoot(x) ,若是x>0 ,digitalRoot(x)=(x+8)%9+1
或者 digitalRoot(x)=(x-1)%9+1
#include<iostream> #include<cstdio> #include<cmath> using namespace std; #define LL long long int a[1010]; int main() { int T; scanf("%d",&T); while(T--) { int n; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&a[i]); LL ans=((LL)a[n-1]+8)%9+1; for(int i=n-2;i>=0;i--) { ans=((ans+1)*a[i]+8)%9+1; } printf("%lld\n",ans); } return 0; }