Blog·Tanky WooABOUTRSS

HDOJ 1061 Rightmost Digit

12 Jul 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

现开始没有思路,看了网上分析后,豁然开朗,一次AC。

和HDOJ 1060看起来挺像,不过思路不一样。(指我的思路不一样,不知道这2题能否用相同思想做。)

题目地址:

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

思路:

思路:末尾数乘以末尾数还是末尾数       且末尾数的变化是有规律的(规律一定小于10)

  代码:

 // HDOJ 1061
// Author: Tanky Woo
/*
思路:末尾数乘以末尾数还是末尾数
      且末尾数的变化是有规律的(规律一定小于10)
*/
#include 
#include 
using namespace std;

long long N;

int main()
{
    char a[10];   //保存转换成字符后的N
    int model[20];
    int nCases;
    scanf("%d", &nCases;);
    while(nCases--)
    {
        scanf("%ld", &N;);
        sprintf(a, "%d", N);
        int len = strlen(a);
        int t = a[len-1] - '0';   //记录N的最后一位
        int i = 0;
        int temp = t * t % 10;
        model[0] = t;
        model[++i] = temp;
        while(1)
        {
            temp*=t;
            temp %= 10;
            if(temp == t)
                break;
            model[++i] = temp;
        }
        ++i;
        int k = ((N % i -1)+i) % i;   // 最后的再+i并对i求与是为了防止N%i=0的情况,比如N=4
        printf("%d\n", model[k]);


    }
    return 0;
}