我试图创建一个程序来检查输入的数字是否为happy number。
我的代码在平方和添加后找到每个数字但是当它达到1时,我希望它打印出来#34;这是一个快乐的数字"。
我看不出代码有什么问题,但我可能会遗漏一些简单的东西。
以下是代码:
number = raw_input('What number?')
dictionary = {}
counter = 0
counter_2 = 0
while counter_2 < 20:
counter_2 += 1
if number != 1:
for n in str(number):
n = int(n)**2
counter += 1
dictionary ['key{}'.format(counter)] = n
added = sum(dictionary.values())
dictionary = {}
number = str(added)
print number
else:
print 'that is a happy number'
答案 0 :(得分:0)
我看不出代码有什么问题,但我可能会遗漏一些简单的
是的,简单的number = raw_input('What number?')
和number = str(added)
正在使number
成为字符串值,但是您想要检查它是否不是整数值1
,这是永远都是真的,所以“其他声明不起作用”。
现在,我不太确定该词典的用途。也许保存已计算的值以防止进一步计算?这没关系,但这里有一个解决方案,对于前1000个满意的数字已经运行良好。
首先,两个函数用于计算数字的平方和。注意,将数字转换为字符串,然后迭代字符并转换回整数是不必要的开销。
square = lambda x: x**2
def square_digits(x):
square_sum = 0
while x > 0:
square_sum += square(x % 10)
x /= 10
return square_sum
然后是一个函数,它检查一个数字是否是一个限制为20次迭代的Happy数字,以防止无限循环。
def check_happy(n, limit=20):
counter = 0
while n != 1 and counter < limit:
counter += 1
n = square_digits(n)
else:
return counter != limit
然后,只需检查您的价值
number = int(raw_input('What number?'))
if check_happy(number):
print number, 'is a happy number'
示例输出。
What number? 19
19 is a happy number
答案 1 :(得分:0)
这是我的程序,用于查找C ++中数字是否快乐
#include <iostream>
using namespace std;
int main() {
int i,j,num,temp,sum=0;
cout<<"Enter number\n";
cin>>num;
while (sum != 1 && sum != 4) {
sum=0;
while (num > 0) {
j = num % 10;
sum += (j * j);
num /= 10;
}
num = sum;
}
if (sum == 1) {
cout<<"Happy Number\n";
} else {
cout<<"UnHappy Number\n";
}
return 0;
}