题目大意:给你一个n,输出n^n 的数根。
              树根的定义是求一个数各个位数的和,如果和是多位数,就继续求和,直到和为一位数。

解题思路:1)树根要怎么求,每个人都知道,或是递归或是两个while,怎么写都行
              2)这道题的重点在于n^n的计算。
                   假设一个数:b*10+c;
                   则这个数的树根是: b+c
                   那么:这个数的平方的树根勒,不妨算一下:root((b*10+c)^2)=root(100*b*b+10*2*b*c+c*c)=b^2+2b*c+c^2
                     (是不是很眼熟)       ~~~                没错,root()=(b+c)^2
                   .....
                   .....
                   推一下,n^n就知道该怎么算啦~~~


代码:
 1#include <iostream>
 2#include <cstdio>
 3#include <cstring>
 4#include <cmath>
 5#include <algorithm>
 6
 7using namespace std;
 8
 9int n,ro,i,ans,summ;
10
11int root(int a)
12{
13    summ=0;
14    while(a>0)
15    {
16        summ+=(a%10);
17        a/=10;
18    }

19    if(summ/10!=0)
20    {
21        return root(summ);
22    }

23    else
24    return summ;
25}

26
27int main()
28{
29
30    while(~scanf("%d",&n))
31    {
32        if(n==0break;
33        ro=root(n);
34        ans=1;
35        for(i=0;i<n;i++)
36        {
37            ans=root(ans*ro);
38        }

39        cout << ans << endl;
40    }

41    return 0;
42}

43