HDOJ1041

用C++写了一遍:

 

#include <iostream>
#include 
<cstring>
#include
<sys/timeb.h>
using namespace  std;
int Result[1002][500],len[1002
];
int
 k;
void Calc(int
 t)
ExpandedBlockStart.gifContractedBlock.gif
{
    
int
 i,j;
    len[k]
=len[k-1
];
    
for(i=0;i<=len[k];i++
)
        Result[k][i]
=Result[k-1][i]*2
;
    Result[k][
0]+=
t;
    
if(Result[k][0]<0
)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Result[k][
0]=10+Result[k][0
];
        j
=1
;
        
while(Result[k][j]==0)j++
;
        Result[k][j]
-=1
;
    }

    
for(j=0,i=0;i<=len[k];i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        Result[k][i]
+=
j;
        j
=Result[k][i]/10
;
        Result[k][i]
%=10
;
    }

    
if(j!=0)
        Result[k][
++len[k]]=
j;
}

void  Solve()
ExpandedBlockStart.gifContractedBlock.gif
{
    
int t=1
;
    memset(len,
0,sizeof
(len));
    memset(Result,
0,sizeof
(Result));
    
for(k=2;k<=1000;k++,t*=(-1
))
            Calc(t);
}

int  main()
ExpandedBlockStart.gifContractedBlock.gif
{
    
int
 n;
    
//
timeb t1,t2;
    
//
long TotalTime;
    
//ftime(&t1);

    Solve();
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**/
/*ftime(&t2); //记录打表后的时间
    TotalTime=(t2.time-t1.time)*1000+(t2.millitm-t1.millitm);
    cout<<TotalTime<<endl; 
*/

    
while(cin>>n)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
for(int i=len[n];i>=0;i--
)
            cout
<<
Result[n][i];
        cout
<<
endl;
    }

    
return 0;
}

 

再用Java写了一遍:

 

import java.util.* ;
import java.math.*
;
public class
 Main 
ExpandedBlockStart.gifContractedBlock.gif
{
    
public static void
 main(String[] args)  
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        BigInteger []str 
= new BigInteger[1002
];
        BigInteger a 
= BigInteger.valueOf(1
);
        BigInteger b 
= BigInteger.valueOf(2
);
        str[
0= str[1= BigInteger.valueOf(0
);
        
int
 n;
        
for(int i = 2; i <= 1000; i++
)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            str[i]
= str[i - 1
].multiply(b);
            
if(i % 2 == 0
)
                str[i] 
=
 str[i].add(a);
            
else

                str[i] 
= str[i].subtract(a);
        }

        Scanner cin 
= new Scanner(System.in);
        
while
(cin.hasNextInt())
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            n 
=
 cin.nextInt();
            System.out.println(str[n]);
        }

    }


}

转载于:https://www.cnblogs.com/Xredman/archive/2009/03/17/1414637.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值