Description
大家都聽說過漢諾塔吧?有n個圓盤由小到大排列,套在a柱上,每次只能移動一個圓盤,而且只能大的在下,小的在上,讓你把a柱上的圓盤移到b柱,給你一個多余的c柱,問你最少移動多少次才能完成任務。
Input
輸入有多組數據,每組包括一個整數n(n<=10000000),表示初始狀態下有n個圓盤,當輸入的n為0時,程序結束,n為負的情況不作處理。
Output
對每個輸入,對應一行輸出,每行輸出包括一個整數,即移動的最小次數,因為數目非常大,所以請對9973求余後再輸出。
Sample Input
Original Transformed
1
2
3
4
0
Sample Output
Original Transformed
1
3
7
15
Hint
采用結構:
……
for(;;){
scanf("%d",&n);
if(n==0)
break;
……
printf(……);
……
}
……至少需要2的n次方減1步
這是我寫的代碼,但是數非常大的時候就不能正常輸出了,應該是溢出了,但具體怎麼修改,求幫忙啊
寫個快速(模)冪運算即可
注意這一條
請對9973求余後再輸出
因為有這一條,所以直接擁int 類型就足夠了,實際上 short 也 完全夠用