轻院 1090 整数幂(多实例测试)

Description
求A^B的最后三位数表示的整数(1<=A,B<=1000)

Input
n个测试实例,每个实例给出两个正整数A,B
Output
输出A^B的最后三位(没有前导0)
Sample Input
22 312 6
Sample Output
8984

题意概括:输出一个数的幂次方的后三位

解题思路:
1: 因为是幂次方,所以要循环幂次

错误原因:
1:前导0的各种不同的情况考虑不够充分。应该分别考虑首位为零且第二位也为零,首位为零但第二位不为零,首位不为零三种情况。
2:没有考虑溢出,因为给的数据是1<=A,B<=1000,要考虑到溢出的情况;所以每次要取余数,只用留下后三位参与接下来的累乘即可。

经验总结:
1: 要取一个数的后几位,就要让一个数取10的几次方的余数。

我的AC代码:

#include<stdio.h>
#include<math.h>

int main(void)
{
    int n;
    int a, b, i, m, T;
    scanf("%d", &T);
    while(T--)
    {
        n = 1;
        scanf("%d%d", &a, &b);
        for(i = 1; i <= b; i ++)
        {
            n *= a;
            m = (int)log10(n)+1;
            if(m >= 4)
            {
                n %= 1000;
            }
        }
        if(n/100%10 ==0 && n/10%10 != 0)
        printf("%d%d\n",n/10%10, n%10);
        else if(n/100%10 ==0 && n/10%10 == 0)
        printf("%d\n", n %10);
        else if(n/100%10 !=0)
        printf("%d%d%d\n", n/100%10, n/10%10, n%10);
    }

    return 0;
} 
posted @ 2017-09-19 23:52  moonlight987  阅读(218)  评论(0编辑  收藏  举报