Posted on 2009-03-13 20:59
Hero 阅读(389)
评论(1) 编辑 收藏 引用 所属分类:
代码如诗--ACM
1 //1010 Accepted 125 152 1190 C++
2 //大整数加法
3
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <string.h>
7
8 struct NODE
9 {
10 int data[10000] ;
11 NODE()
12 {
13 for( int i=0; i<10000; i++ )
14 data[i] = 0 ;
15 }
16 void Init()
17 {
18 for( int i=0; i<10000; i++ )
19 data[i] = 0 ;
20 }
21 void Print()
22 {
23 int i ;
24 for( i=10000-1; 0==data[i]&&i>=0; i-- ) ;
25 if( i < 0 )
26 {
27 printf( "0\n" ) ;
28 }
29 else
30 {
31 for( ; i>=0; i-- ) printf( "%d", data[i] ) ;
32 printf( "\n" ) ;
33 }
34 }
35 };
36
37 void Fadd( struct NODE &TA, struct NODE &TB )
38 {
39 int carry = 0 ;
40 for( int i=0; i<10000; i++ )
41 {
42 TA.data[i] += TB.data[i]+carry ;
43 if( TA.data[i] >= 10 )
44 {
45 carry = 1 ;
46 TA.data[i] -= 10 ;
47 }
48 else
49 {
50 carry = 0 ;
51 }
52 }
53 }
54
55 struct NODE A ;
56 struct NODE B ;
57
58 int innum ;
59 int inn, ink ;
60
61 int main()
62 {
63 while( scanf( "%d", &innum ) != EOF )
64 {
65 while( innum -- )
66 {
67 scanf( "%d %d", &inn, &ink ) ;
68 A.Init() ; B.Init() ; B.data[0] = 1 ;
69
70 for( int i=0; ; i++ )
71 {
72 if( ink <= 0 ) break ;
73 A.data[i] = ink % 10 ;
74 ink = ink /10 ;
75 }
76
77 for( int i=1; i<inn; i++ )
78 {
79 Fadd( A, B ) ;
80 Fadd( A, A ) ;
81 }
82
83 A.Print() ;
84 }
85 }
86 return 0 ;
87 }