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;
}
题目如下:






