HOJ 1401Gigantic Sums 解题报告

一道时间换空间的经典题,当时做的时候没有考虑会溢出,结果导致WA:

# include 
#
include 
 
int main()
{
    int n
,  temp ,  a ,  b ,  i ,  flag ,  tag;
 
    
while  (scanf( " %d " ,   & n)  ==   1 )
    {
        scanf(
" %d %d " ,   & a ,   & b);
        temp 
=  a  +  b;
        tag 
=   0 ;
        
while  ( ! temp  &&  tag  <  n  -   1 )
        {
            scanf(
" %d %d " ,   & a ,   & b);
            temp 
=  a  +  b;
            tag
++ ;
        }
        flag 
=   0 ;
        
for  (i  =   0 ; i  <  n  -   1   -  tag; i ++ )
        {
            scanf(
" %d %d " ,   & a ,   & b);
            
if  ((a  +  b  <   9 &&  flag  ==   0 )
            {
                
printf ( " %d " ,  temp);
                temp 
=  a  +  b;
            }
            
else
            {
                
if  (a  +  b  <=   9 )
                {
                    temp 
=  temp  *   10   +  a  +  b;         // 此处没有考虑temp会溢出
                    flag ++ ;
                }
                
else
                {
                    
if  ( ! flag)
                    {
                        
printf ( " %d " ,  temp  +  (a  +  b)  /   10 );
                    }
                    
else
                    {
                        
printf ( " %d " ,  temp  +   1 );
                    }
                    flag 
=   0 ;
                    temp 
=  (a  +  b)  %   10 ;
                }
            }
        }
        
printf ( " %d/n " ,  temp);
    }
 
    
return   0 ;
}

  后来改进了算法,代码量少了不少:
(思路就是如果下一位不是9就输出上一位,否则就记录9的个数,直到不是9为止)

# include 
#
include 

int main()
{
    int n
,  temp ,  a ,  b ,  num;

    
while  (scanf( " %d " ,   & n)  ==   1 )
    {
        scanf(
" %d %d " ,   & a ,   & b);
        temp 
=  a  +  b;
        num 
=   0 ;
        n
-- ;
        
while  (n -- )
        {
            scanf(
" %d %d " ,   & a ,   & b);
            
if  (a  +  b  <   9 )
            {
                
printf ( " %d " ,  temp);
                temp 
=  a  +  b;
                
if  (num)
                {
                    
while  (num -- )
                    {
                        
printf ( " 9 " );
                    }
                    num 
=   0 ;
                }
            }
            
else   if  (a  +  b  >   9 )
            {
                
printf ( " %d " ,  temp  +   1 );
                temp 
=  (a  +  b)  %   10 ;
                
if  (num)
                {
                    
while  (num -- )
                    {
                        
printf ( " 0 " );
                    }
                    num 
=   0 ;
                }
            }
            
else
            {
                num
++ ;
            }
        }
        
printf ( " %d " ,  temp);
        
if  (num)
        {
            
while  (num -- )
            {
                
printf ( " 9 " );
            }
        }
        
printf ( " /n " );
    }

    
return   0 ;
}

你可能感兴趣的:(算法)