| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 433 人关注过本帖
标题:poj 1001 为啥出现 timeout limit 我查不到哪里越界了!大神帮看看
取消只看楼主 加入收藏
hackrol
Rank: 4
来 自:世界和平组织
等 级:业余侠客
帖 子:62
专家分:267
注 册:2014-9-6
结帖率:0
收藏
 问题点数:0 回复次数:0 
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;
}

题目如下:
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: color 
2014-10-14 23:54
快速回复:poj 1001 为啥出现 timeout limit 我查不到哪里越界了!大神帮看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028484 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved