leetcode快楽数c++
1300 ワード
快楽数
アルゴリズムを作成して、1つの数が「快楽数」であるかどうかを判断します.
「快楽数」は、正の整数に対して、その数を各位置の数値の二乗和に置き換えるたびに、この数が1になるまで繰り返し、無限ループである可能性がありますが、常に1にならないまで繰り返します.1に変えることができれば、この数が快楽数です.
例:
解法1:
快楽数ではない数を不快数(unhappy number)と呼び,すべての不快数の数位二乗和計算は,最後に4→16→37→58→89→145→42→20→4のサイクルに入る.
解法2:
アルゴリズムを作成して、1つの数が「快楽数」であるかどうかを判断します.
「快楽数」は、正の整数に対して、その数を各位置の数値の二乗和に置き換えるたびに、この数が1になるまで繰り返し、無限ループである可能性がありますが、常に1にならないまで繰り返します.1に変えることができれば、この数が快楽数です.
例:
: 19
: true
:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
解法1:
快楽数ではない数を不快数(unhappy number)と呼び,すべての不快数の数位二乗和計算は,最後に4→16→37→58→89→145→42→20→4のサイクルに入る.
class Solution {
public:
vector a{ 4,16,37,58,89,145,42,20 };//
vector::iterator pos;
bool isHappy(int n) {
pos=find(a.begin(),a.end(),n);
if(pos!=a.end()) return false;//
int flag=0;//
while(n)
{
flag+=pow(n%10,2);
n/=10;
}
if(flag==1)
return true;
else return isHappy(flag);//
}
};
解法2:
class Solution {
public:
bool isHappy(int n) {
string str;
int tmp = n;
for(int i=0;i<6;i++)// , 6
{
str = to_string(tmp);
tmp = 0;
for(auto c : str)
{
tmp += (c-'0') * (c-'0');
}
if(tmp == 1)
return true;
}
return false;
}
};