题意:
国际象棋,一共64个方格,第一个格子里放一粒麦子,第二个放2粒,第三个放4粒,第四个放8粒。。。。。(后面的数字是前面的两倍)
求放满64个格子,一共需要多少粒麦子。
解题:
还是一个大数的问题。
View Code
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int num[1000]; 6 int sum[1000]; 7 memset(num , 0 , sizeof(num)); 8 memset(sum , 0 , sizeof(sum)); 9 num[0] = 1; 10 sum[0] = 1; 11 int i , j; 12 int temp1 = 0 , temp2 = 0; 13 for( i = 2; i <= 64; i++) 14 { 15 for(j = 0; j <= temp1; j++) //计算当前棋盘格里需要多少麦子 16 { 17 num[j] *=2; 18 } 19 for(j = 0; j <= temp1; j++) 20 { 21 num[j+1] += num[j]/10; 22 num[j] %= 10; 23 } 24 if(num[temp1+1]) temp1++; 25 for(j = 0; j <= temp1; j++) //计算一共需要多少麦子 26 { 27 sum[j] += num[j]; 28 } 29 for(j = 0; j <=temp2; j++) 30 { 31 sum[j+1] += sum[j]/10; 32 sum[j] %= 10; 33 } 34 if(sum[temp2+1]) temp2++; 35 } 36 for(i = temp2; i>= 0; i--) 37 cout<<sum[i]; 38 cout<<endl; 39 return 0; 40 }