長方形のフットプリント
タイトル
我々は、2使用できる横の小さな四角形1または垂直より大きな長方形を覆います。N 2の使用する重複のない小さな四角形1カバレッジ大きな長方形2 * nを、どのように多くの方法の合計は?
考え
フィボナッチ数
2進数の1の数
タイトル
整数(INT)を入力し、2進数の数1を表す出力します。前記負の数は補数を示します。
考え
負の補数は、プリアンブルは1のシリーズで、32ビットのint型
コード
class Solution {
public:
int NumberOf1(int n) {
int cnt=0;
if(n==0)
cnt=0;
else if(n>0){
while(n>0){
if(n&1==1){
cnt++;
}
n /= 2;
}
}else{
int div=0;
while(n<0){
if(n&1==1){
cnt++;
}
n /= 2;
div++;
}
cnt += (32-div);
}
return cnt;
}
};
進変換
タイトル
最大30桁非負整数出力の長さは、2進数に変換されます。
考え
明らかに、この整数は、符号なし長い長い(20桁)を超える範囲が必要表す手書き整数除算を
コード
#include<iostream>
#include<stack>
#include<cstring>
#include<string>
using namespace std;
int num[30];
int tmp[30];
stack<int> bin;
string str;
bool equalZero(int num[]){
bool flag=true;
for(int i=0;i<=29;i++){
if(num[i]!=0){
flag=false;
break;
}
}
return flag;
}
int main(){
while(cin>>str){
//string存入int数组
memset(num,0,sizeof(num));
memset(tmp,0,sizeof(tmp));
int len=str.size();
int cnt=29;
len--;
while(len>=0){
num[cnt--]=(str[len--]-'0');
}
//当num!=0时执行大数除法
while(equalZero(num)==false){
bin.push(num[29]%2);
//大数除法
int carry=0;
for(int i=0;i<=29;i++){
tmp[i]=(carry+num[i])/2;
carry=(carry+num[i])%2;
carry*=10;
}
memcpy(num,tmp,sizeof(tmp));
memset(tmp,0,sizeof(tmp));
}
while(!bin.empty()){
cout<<bin.top();
bin.pop();
}
cout<<'\n';
}
}