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

一道ACM题,提交好多次了,还是WA,大家看一下咋回事

2012-02-13 
一道ACM题,提交好多次了,还是WA,大家看一下怎么回事?http://acm.pku.edu.cn/JudgeOnline/problem?id1001E

一道ACM题,提交好多次了,还是WA,大家看一下怎么回事?
http://acm.pku.edu.cn/JudgeOnline/problem?id=1001

Exponentiation  
Time   Limit:500MS     Memory   Limit:10000K
Total   Submit:19697   Accepted:4454  

Description
Problems   involving   the   computation   of   exact   values   of   very   large   magnitude   and   precision   are   common.   For   example,   the   computation   of   the   national   debt   is   a   taxing   experience   for   many   computer   systems.  

This   problem   requires   that   you   write   a   program   to   compute   the   exact   value   of   Rn   where   R   is   a   real   number   (   0.0   <   R   <   99.999   )   and   n   is   an   integer   such   that   0   <   n   <=   25.  

Input
The   input   will   consist   of   a   set   of   pairs   of   values   for   R   and   n.   The   R   value   will   occupy   columns   1   through   6,   and   the   n   value   will   be   in   columns   8   and   9.

Output
The   output   will   consist   of   one   line   for   each   line   of   input   giving   the   exact   value   of   R^n.   Leading   zeros   should   be   suppressed   in   the   output.   Insignificant   trailing   zeros   must   not   be   printed.   Don 't   print   the   decimal   point   if   the   result   is   an   integer.

Sample   Input


95.123   12
0.4321   20
5.1234   15
6.7592     9
98.999   10
1.0100   12


Sample   Output


548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

Hint
If   you   don 't   know   how   to   determine   wheather   encounted   the   end   of   input:  
s   is   a   string   and   n   is   an   integer  


C++
while(cin> > s> > n)
{
...
}
c
while(scanf( "%s%d ",s,&n)==2)   //to     see   if   the   scanf   read   in   as   many   items   as   you   want
/*while(scanf(%s%d ",s,&n)!=EOF)   //this   also   work         */
{
...
}

#include   <stdio.h>
#include   <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <string.h>

void   compute(char   *result,long   m);
void   print(char   *result,int   x,int   n,int   y);

int   main(int   argc,   char   *argv[])
{
        float   m;
        int   n,x,i,k;


        char   mm[7],result[125];
        while(scanf( "%s%d ",mm,&n)!=EOF)
        {
                                                                      if(n==0)
                                                                      {
                                                                                      printf( "%d\n ",1);
                                                                                      continue;
                                                                      }
                                                                     
            m=(float)atof(mm);
            if(m==0)
            {
                            printf( "%d\n ",0);
                            continue;
            }
            k=(int)m;
            for(i=0;i <125;i++)
              result[i]= '0 ';
            result[124]= '1 ';
            x=0;
          for(i=5;i> =0;i--)
          {
                                          if(mm[i]== '. ')
                                          {
                                            x=5-i;
                                            break;
                                          }
          }


          if(m==k)
            x=0;
            m=m*pow(10,x);
            for(i=0;i <n;i++)
              compute(result,(long)m);
              print(result,x,n,k);  
        }
             
   
    system( "PAUSE ");        
    return   0;
}

void   compute(char   *result,long   m)
{
          int   n,y,i;
          n=0;
          for(i=124;i> =0;i--)
          {
                          y=(result[i]- '0 ')*m+n;
                          n=y/10;
                          result[i]=y%10+ '0 ';
          }
}

void   print(char   *result,int   x,int   n,int   y)
{
         
          int   i,j,k=124;
          for(i=124;i> =124-x*n+1;i--)
          {
                                                if(result[i]!= '0 ')
                                                {
                                                  k=i;
                                                  break;
                                                }
          }
          if(y)
          {
          for(i=0;i <=k;i++)
          {
              if(result[i]!= '0 ')
              {
                  for(j=i;j <=k;j++)
                  {
                    printf( "%c ",result[j]);
                    if((j==125-x*n-1)&&(x!=0))
                      printf( ". ");
                    }
                    printf( "\n ");
                    break;


              }
          }
          }
          else
          {
                                                    printf( ". ");
                                                    for(i=125-n*x;i <=k;i++)
                                                      printf( "%c ",result[i]);
                                                    printf( "\n ");
          }
}
                   


[解决办法]
我是在写出来这个程序后3个月后偶然把程序改过的。
用用特殊的测试用例。比如
10 10
1 1
0.1 25

[解决办法]
练细心的:) 这题ac了以后推荐来看看偶们这里的1001

Simple Arithmetics
http://acm.fjnu.edu.cn/show?problem_id=1001

对STL有点感觉后来做作这个~
Searching the Web
http://acm.fjnu.edu.cn/show?problem_id=1015

[解决办法]
Simple Arithmetics
这题(不是楼主说的那题) 偶从写出来到ac也是一个月:)

要自己多想想~

Searching the Web 倒是还好~

热点排行