幸運数かどうかを判断する
1.幸運数の定義:
十進法の数字の各ビット加算とバイナリの数字の各ビットの加算とが等しい場合はバイナリ数であり、そうでない場合はバイナリ数ではなく、0-nの幸運数の個数を出力する.
2.C++実装:
3.python実装
十進法の数字の各ビット加算とバイナリの数字の各ビットの加算とが等しい場合はバイナリ数であり、そうでない場合はバイナリ数ではなく、0-nの幸運数の個数を出力する.
2.C++実装:
#include <iostream>
using namespace std;
int tenSummary(int x)
{
int sum=0;
while (x>=1)
{
int mod=x%10;
x=x/10;
sum+=mod;
}
return sum;
}
int twoSummary(int x)
{
int icount = 0;
while (x != 0 )
{
icount ++;
x = x & (x - 1);
}
return icount;
}
bool isLucky(int x)
{
int tenSum=tenSummary(x);
int twoSum=twoSummary(x);
if(tenSum==twoSum)
{
return true;
}
else
{
return false;
}
}
int getNumber(int x)
{
int number=0;
for (int i=1;i<=x;i++)
{
if (isLucky(i)==true)
{
number++;
}
else
{
continue;
}
}
return number;
}
int main()
{
int number;
while(cin>>number)
{
cout<<"ten"<<tenSummary(number)<<endl;
cout<<"two"<<twoSummary(number)<<endl;
cout<<"number="<<getNumber(number)<<endl;
}
return 0;
}
3.python実装
import sys
def tenSummary(x):
tenSum=0
while(x!=0):
mod=x%10
x=x/10
tenSum=tenSum+mod
return int(tenSum)
def twoSummary(x):
if x >= 0:
return bin(x).count('1')
else:
return bin(x & 0xffffffff).count('1')
def isLucky(x):
tenSum=tenSummary(x)
twoSum=twoSummary(x)
if(tenSum==twoSum):
return True
else:
return False
def getNumber(x):
number=0
if(x==0):
return number
for r in range(1,x+1):
if isLucky(r):
number=number+1
print(r)
else:
continue
return number
if __name__=='__main__':
print(getNumber(123))