分享-整数幂算法

#include <stdio.h>
#include <time.h>
#define M 100000
int main() {
    unsigned a[M];     //以无符号整形存,每100000为一进位,即数组每个元素最大9999
    unsigned long k;   //k用来保存每次乘积
    int i,j,m,t,n=1,r; //n是数组长度,r是进位
    time_t start, end;

    a[0]=1;
    while (1) {
        printf("\n输入m t(用万进制方法求m的t次方):");fflush(stdout);
        rewind(stdin);
        if (2==scanf("%d %d",&m,&t)) {
            if (m>1 && t>1) break;
            else printf("要求m>1且t>1");
        }
    }
    start = clock();
    for (j=0;j<t;j++) {
        r=0;
        for (i=0;i<n;i++) {
            k=a[i]*m+r;
            a[i]=k%10000;
            r=k/10000;
        }
        while (r>0) {
            a[n++]=r%10000;
            if (n>=M-1) {
                printf("%d的%d次方超过万进制%d位,无法计算!\n",m,t,M);
                return 1;
            }
            r/=10000;
        }
    }
    printf("%d的%d次方=",m,t);
    for (i=n-1;i>=0;i--) {
        if(i==n-1) printf("%d"  ,a[i]);
        else       printf("%04d",a[i]);
    }
    end = clock();
    printf("\n\n本次程序耗时: %lfs\n", (double(end)-double(start)) / CLOCKS_PER_SEC);
    return 0;
}

 

 

 

posted @ 2013-05-25 19:25  aping.yellow  阅读(244)  评论(0)    收藏  举报