#include
#include
using namespace std;
int main(){
long long int a,b,c;
while(cin>>b){
c=pow(2,b+2)-2;
for(int i=1;i+9<b;i++){
c-=pow(2,i+1);
}if(b>=10){
c-=2;
}
cout<<c<<endl;
}
return 0;
}
為何在第54筆測資發生少2的現象
for(int i=1;i+9<b;i++)
c-=pow(2,i+1);
這裡出現問題
你可以看看它減的量
當 i = 1時 它只有減2
for(i=1; i+9 < b; i++)
{
cout << "before:" << c << endl;
c -= pow(2, i+1);
cout << "after:" << c << endl;
getch(); //#include <conio.h>
}
我在猜想可能是數字太大的關係
導致底層發生某些錯誤
什麼錯誤呢?
我也不知道
只能告訴你錯在哪
如果版上有人知道
還煩請不吝賜教
如果有幫到忙
還希望能幫我衝衝人氣><
謝謝
http://ntnuee40475032h.pixnet.net/blog
#include
#include
using namespace std;
int main(){
long long int a,b,c;
while(cin>>b){
c=pow(2,b+2)-2;
for(int i=1;i+9<b;i++){
c-=pow(2,i+1);
}if(b>=10){
c-=2;
}
cout<<c<<endl;
}
return 0;
}
為何在第54筆測資發生少2的現象
for(int i=1;i+9<b;i++)
c-=pow(2,i+1);
這裡出現問題
你可以看看它減的量
當 i = 1時 它只有減2
for(i=1; i+9 < b; i++)
{
cout << "before:" << c << endl;
c -= pow(2, i+1);
cout << "after:" << c << endl;
getch(); //#include
}
我在猜想可能是數字太大的關係
導致底層發生某些錯誤
什麼錯誤呢?
我也不知道
只能告訴你錯在哪
如果版上有人知道
還煩請不吝賜教
如果有幫到忙
還希望能幫我衝衝人氣><
謝謝
http://ntnuee40475032h.pixnet.net/blog
i=1時 不是減2^(1+1)=4嗎?
#include
#include
using namespace std;
int main(){
long long int a,b,c;
while(cin>>b){
c=pow(2,b+2)-2;
for(int i=1;i+9<b;i++){
c-=pow(2,i+1);
}if(b>=10){
c-=2;
}
cout<<c<<endl;
}
return 0;
}
為何在第54筆測資發生少2的現象
1.程式碼產生了型別的益位 long long int , 會不足 題目說會到2的62次方 所以 應用 unsigned long long int
2.為何在第54筆測資發生少2的現象<== 有興趣可以去看一下pow的原型吧
若只求2的次方, 其實用位元位元移位運算子 << 就可以了 , 比pow好用多了
例如:
unsigned long long int ts(int n){
unsigned long long int n2=1;
return n2<<n;
}
3.不過你還是會發現, 這樣也會有錯, 因為你的程式計算過程中
while(cin>>b){
c=pow(2,b+2)-2;
有看出來了嗎 若b 為62時 就會產生溢位了 , 所以 你的方法無法滿足 n=62 只能算到n<62
其實你可以換個方向思考, 開個63的陣列
把每年新增的兔子放到陣列 最後在去加總