首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言求二的10万次方代码的疑问

2013-03-29 
c语言求2的10万次方代码的疑问#include stdio.h#define M 10000void main(){ unsigned a[M]//以无符号

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();
}


以上这个代码是用来求2的十万次方的,可是我怎么看不懂呢?这个是什么原理?谁能给我讲一下这个算法的过程?
源码地址:http://bbs.cyuyan.com.cn/thread-1063-1-1.html c
[解决办法]
就是用1个整型数组来精确表示一个很大的数字。你提供的那个程序中,用一个 unsigned int 来表示4位数字。比如123456就需要用两个unsigned int, a[0]=3456 a[1]=12

具体你可以再搜索一下 ”高精度运算“
[解决办法]
纠正上帖代码第29行错误后:
#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;
}

热点排行