poj 1001 为啥出现 timeout limit 我查不到哪里越界了!大神帮看看
程序代码:
//对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 //现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <= 25。 #include "stdio.h" #include "ctype.h" #include "stdlib.h" #define MAX 1000 //数组最大长度 int main(void) { char ch[100],*p1,*p2; int n=0,count=0,flag=0,num=0,cfshumax; int shu[MAX]={0},jw=0,ws=1,tmp,cfshu=0; register int i=0; printf("请输入实数(0.0-99.999):\n"); while(1) //读取数组 { scanf("%s",ch); p1=p2=ch; while(*p1) { if(!isdigit(*p1)&&(*p1)!='.') goto chukou; p1++; } p1--; while(*p1=='0')p1--; //使p指向最后一个不等于0的位置; for(i=0;i<p1-p2+1;i++) { if(ch[i]!='.') { n=10*n+ch[i]-'0'; if(flag==1)count++; } if(flag==1&&ch[i]=='.')goto chukou; if(flag==0&&ch[i]=='.')flag=1; } if(n>=100000) { chukou: printf("输入错误,请输入0.0-99.999之间的数:\n"); n=0; continue; } else break; } printf("请输入次方数(大于0且小于等于25):\n"); fflush(stdin); while(scanf("%d",&cfshumax),cfshumax>25&&cfshumax<=0) printf("输入错误,请重新输入次方数:\n"); shu[0]=1; while(cfshu<cfshumax) { for( i = 0; i < ws; i++) { tmp = n * shu[i] + jw; //基数与当前所得临时结果的从低到高各位a[j-1]依次相乘(加上进位) shu[i] = tmp % 10; //更新临时结果的位上信息 jw = tmp / 10; //更新相乘后的进位 } while(jw) //如果有进位 { ++ws; //新加一位,添加信息。位数增1 shu[ws-1] = jw % 10; //将进位放在新加的结果位上 jw = jw/10; //看还能不能进位 } cfshu++; } //printf("%d,%d",ws,count*cfshumax); if(ws<cfshumax*count) { printf("."); for(i=0;i<count*cfshumax-ws;i++) printf("0"); } for(i=0;i<ws;i++) { if(i==ws-cfshumax*count)printf("."); printf("%d",shu[ws-i-1]); } return 0; }
题目如下: