c语言求2的10万次方代码的疑问
#include "stdio.h"
#define M 10000
void main()
{
unsigned a[M]; //以无符号整形存,每10000为一进位,即数组每个元素最大9999
unsigned long k; //k用来保存每次乘积
int i,j,m,t,n=1,r; //n是数组长度,r是进位
FILE *fp;
a[0]=1;
printf("\n输入m and t(空格隔开: m^t = ?):");
scanf("%d %d",&m,&t);
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;
r/=10000;
}
}
fp=fopen("c:\\2-100000.txt","w");
printf("\n %d^%d =",m,t);
for(i=n-1; i>=0; i--)
{
if(a[i]<1000&&a[i]>=100&&i!=n-1)
fprintf(fp,"%c",'0'); //数据不够4位,前面补0
else if(a[i]<100&&a[i]>=10&&i!=n-1)
fprintf(fp,"%s","00");
else if(a[i]<10&&i!=n-1)
fprintf(fp,"%s","000");
fprintf(fp,"%d",a[i]);
}
fclose(fp);
getch();
}
#include <stdio.h>
#include <locale.h>
#define M 10000
int main() {
unsigned a[M]; //以无符号整形存,每10000为一进位,即数组每个元素最大9999
unsigned long k; //k用来保存每次乘积
int i,j,m,t,n=1,r; //n是数组长度,r是进位
setlocale(LC_ALL,"chs");
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");
}
}
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]);
}
return 0;
}