快乐数(编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和, 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1, 那么这个数就是快乐数。)

示例:
输入: 19
输出: true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

public static boolean isHappy(int n) {
        boolean flag = true;
        //用来添加每次计算后的结果
        List<Integer> list = new ArrayList<Integer>();
        while(n!=1) {
            //计算数字长度
            String s = "" + n;
            int len = s.length();
            int sum = 0;
            //对该数的每一位平方后相加
            for(int i = len;i>0;i--) {
                sum += (int)Math.pow(n % (int)Math.pow(10,i) / (int)Math.pow(10, i - 1) , 2);
            }
            //如果该集合已经包含sum,那么就是死循环,直接返回false
            if(list.contains(sum)) {
                return !flag;
            }
            //不包含,将sum加入集合中
            list.add(sum);
            //将sum的值赋给n
            n = sum;
        }
        return flag;
    }

原文地址:https://www.cnblogs.com/duy666/p/10476867.html

时间: 2024-10-12 22:41:47

快乐数(编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和, 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1, 那么这个数就是快乐数。)的相关文章

一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数

4个字节表示的整数,总共只有2^32约等于4G个可能.为了简单起见,可以假设都是无符号整数.分配500MB内存,每一bit代表一个整数,刚好可以表示完4个字节的整数,初始值为0.基本思想每读入一个数,就把它对应的bit位置为1,处理完40G个数后,对500M的内存遍历,找出一个bit为0的位,输出对应的整数就是未出现的.算法流程:1)分配500MB内存buf,初始化为02)unsigned int x=0x1;  for each int j in file  buf=buf|x<<j;  e

(hdu step 4.1.5)find the nth digit(求S串中的第n个位置上是什么数字)

题目: find the nth digit Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 689 Accepted Submission(s): 244   Problem Description 假设:S1 = 1S2 = 12S3 = 123S4 = 1234.........S9 = 123456789S10 = 123456789

编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示

编写一个算法,将非负的十进制整数转换为其他进制的数输出,10及其以上的数字从‘A’开始的字母表示. 要求: 1) 采用顺序栈实现算法: 2)从键盘输入一个十进制的数,输出相应的八进制数和十六进制数. #include "stdio.h" #define StackSize 100 typedef char ElemType; typedef struct { ElemType data[StackSize]; int top; }SqStack; int trans(int d, in

剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数

题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 在做这道题的时候我最先考虑的是每次比较对角线上的元素可能可以取得较好的效果, 以查找9为例, 从1(0,0)开始,1<10,可以得出结论,10在1的右侧或下侧: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 然后看4(1,1),4<9, 1 2 8 9 2

数模常用算法系列--整数线性规划(分枝定界法)、整数非线性规划(蒙特卡洛法)

整数线性规划求解----分枝定界法 什么是整数规划? ? 线性规划中的变量(部分或全部)限制为整数时,称为整数规划.若在线性规划模型中,变量限制为整数,则称为整数线性规划.目前所流行的求解整数规划的方法,往往只适用于整数线性规划.目前还没有一种方法能有效地求解一切整数规划. 整数规划的分类 - 变量全限制为整数时,称(完全)整数规划 - 变量部分限制为整数时,称混合整数规划 什么是分枝定界法 ? 原理如下: ? 设有最大化的整数规划问题A,与它相应的线性规划为问题B,从解问题B开始,若其最优解不

回文指的是一个字符串从前面读和从后面读都一 样,编写一个算法判断一个字符串是否为回文。

回文指的是一个字符串从前面读和从后面读都一 样,编写一个算法判断一个字符串是否为回文. 要求: 1)采用链栈实现算法: 2)从键盘输入一个字符串,输出判断结果. #include"stdio.h" #include"stdlib.h" typedef char ElemType; typedef struct stnode { ElemType data; struct stnode *next; }StNode, *LinkStack; int huiwen(ch

python 用户在键盘上输入一个自然数n,然后在区间[1, 5n]上随机生成n个不重复的自然数,输出这些自然数, 然后继续编写代码对这些自然数进行处理,只保留所有偶数,并输出这些偶数

#用户在键盘上输入一个自然数n,然后在区间[1, 5n]上随机生成n个不重复的自然数,输出这些自然数,# 然后继续编写代码对这些自然数进行处理,只保留所有偶数,并输出这些偶数import randomn=int(input("请输入整数"))shu=set()i=0while True: num=random.choice(range(1,5*n+1))#生成随机数 shu.add(num) if len(shu)==n: breakprint("n个不重复的随机数是:&qu

阿里巴巴 2015 实习笔试题 分布式系统中的RPC请求经常出现乱序的情况 写一个算法来将一个乱序的序列保序输出

分布式系统中的RPC请求经常出现乱序的情况. 写一个算法来将一个乱序的序列保序输出.例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是: 1 2 3, 4, 5 6 7, 8, 9, 10 上述例子中,3到来的时候会发现4,5已经在了.因此将已经满足顺序的整个序列(3, 4, 5)输出为一行. 要求: 1. 写一个高效的算法完成上述功能,实现要尽可能的健壮.易于维护 2. 为该算法设计并实现单元测试 貌似效率不是很高,有时间的时候改进下.

给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。

1 package digitAddTogither; 2 3 /** 4 * Created by ZKY on 2017-08-15 01:00. 5 * 给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数. 6 * 样例 7 * 给出 num = 38. 8 * 相加的过程如下:3 + 8 = 11, 9 * 1 + 1 = 2. 10 * 因为 2 只剩下一个数字,所以返回 2. 11 */ 12 public class DoMain 13 { 14 /**