#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)){
int a[2000]={0};
int i,j,max=0,carry=0;
a[max]=1;
for(i=1;i<=n;i++){
for(j=0;j<=max;j++){
a[j]=a[j]*2+carry;
if((carry=a[j]/10)!=0&&j==max) max++;
a[j]=a[j]%10;
}
}
for(i=max;i>=0;i--) printf("%d",a[i]);
printf("\n");
}
}
目前看到的問題有2個:
1. scanf() 讀到 EOF(End of File, 檔案結尾) 會回傳 EOF ,
EOF 在 <stdio.h> 中被定義的數值是 -1 ,
由於 -1 被轉成 bool 會是 true ,
所以你的程式會不停回傳 EOF 而形成無限迴圈~
2. 你的方法是每次讀入一個 N 就要 1 開始一直往上算,
但你會發現在計算時其實就會包含 0~N-1 的答案,
所以可以一開始直接計算N=5000並將 0~5000 的答案建表儲存起來,
這樣才不會作重複的計算而拖慢時間~
以上希望有幫助到你~ OwO
目前看到的問題有2個:
1. scanf() 讀到 EOF(End of File, 檔案結尾) 會回傳 EOF ,
EOF 在 中被定義的數值是 -1 ,
由於 -1 被轉成 bool 會是 true ,
所以你的程式會不停回傳 EOF 而形成無限迴圈~
2. 你的方法是每次讀入一個 N 就要 1 開始一直往上算,
但你會發現在計算時其實就會包含 0~N-1 的答案,
所以可以一開始直接計算N=5000並將 0~5000 的答案建表儲存起來,
這樣才不會作重複的計算而拖慢時間~
以上希望有幫助到你~ OwO
謝謝