首页 > 试题广场 >

归一数字

[编程题]归一数字
  • 热度指数:515 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

归一数字的定义过程如下:

给定一个正整数,计算它每一位数的平方和生成一个新的数字,重复这个过程,当生成的新数字等于1时,则认定该正整数为归一数字。

输入描述

Int型正整数

 

输出描述

布尔型true/false


例子: 82是一个归一数字

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1



示例1

输入

82

输出

true

备注:


使用快慢指针法求解,如果在操作过程中出现循环且相遇点不为1,则n肯定不是归一数字
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;
    }
}

编辑于 2021-04-12 13:23:37 回复(0)
Python版本,供参考
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")


发表于 2022-03-21 11:26:46 回复(1)

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;
    }
}

发表于 2021-10-09 18:24:05 回复(0)
#
# 是否归一数字
# @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

发表于 2021-08-15 01:52:39 回复(0)
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

发表于 2021-04-13 12:35:43 回复(1)
# 是否归一数字
# @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


发表于 2021-04-13 11:13:20 回复(0)