归一数字的定义过程如下:
给定一个正整数,计算它每一位数的平方和生成一个新的数字,重复这个过程,当生成的新数字等于1时,则认定该正整数为归一数字。
输入描述
Int型正整数
输出描述
布尔型true/false
例子: 82是一个归一数字
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
import java.util.*; public class Solution { /** * 是否归一数字 * @param n int整型 数字 * @return bool布尔型 */ public boolean isHappy(int n) { // 快慢指针法 int fast = n, slow = n; do{ slow = squareSum(slow); fast = squareSum(fast); fast = squareSum(fast); }while(slow != fast); if(fast == 1) return true; // 如果相遇的时候是1,就是快乐数 else return false; // 否则不是快乐数,陷入了无限循环 } private int squareSum(int m){ int squaresum = 0; while(m != 0){ squaresum += (m % 10)*(m % 10); m /= 10; } return squaresum; } }
class Solution: def isHappy(self, n): n = str(n) sum1 = 0 for i in range(len(n)): sum1 += pow(int(n[i]), 2) if sum1 == 1: return True else: return False def trans(self, n): n = str(n) sum1 = 0 for i in range(len(n)): sum1 += pow(int(n[i]), 2) return sum1 n = int(input()) list1 = [] aa = Solution() while aa.isHappy(n) == False: if n in list1: print("false") else: list1.append(n) n = aa.trans(n) if aa.isHappy(n) == True: print("true")
import org.testng.annotations.Test;
import java.util.*;
public class Solution {
public static void main(String[] args) {
boolean b = isHappy(82);
System.out.println(b);
}
/**
* 是否归一数字
* @param n int整型 数字
* @return bool布尔型
*/
public static boolean isHappy(int n) {
// write code here
boolean b = true;
if (n == 1) {
return b;
}
ArrayList<Integer> arr = new ArrayList<>();
for (int i = 0; n > 0; i++) {
arr.add(n % 10);
n /= 10;
}
if (arr.size() == 1) {
b= false;
}else {
for (Integer num : arr) {
n += num * num;
}
arr.clear();
return isHappy(n);
}
return b;
}
}
# # 是否归一数字 # @param n int整型 数字 # @return bool布尔型 # class Solution: def isHappy(self , n ): nn = list(map(int,list(str(n)))) nlen = len(nn) while nlen != 1: s = 0 for i in range(nlen): s += nn[i]**2 n = s nn = list(map(int,list(str(n)))) nlen = len(nn) return n == 1
class Solution: def isHappy(self , n ): while True: a = str(n) b = list(a) c = 0 if n==1: return(True) break if len(b)==1: return(False) break else: for i in range(len(b)): c = c + int(b[i])**2 n = c
# 是否归一数字 # @param n int整型 数字 # @return bool布尔型 defisHappy(n): every_num=[] i=10 # 表示个位 while(n >0): every_num.append(n%i) n=n-n%i n=n/10 new_num=0 fornuminevery_num: new_num=new_num+num**2 returnnew_num defis_one(new_num): isone=False foriinrange(100): new_num=isHappy(int(new_num)) ifnew_num==1: isone=True break returnisone n=int(input()) is_one=is_one(n) ifis_one==True: print('true') else: print('false') # write code here