UVA 10591 - Happy Number

题目大意:将给出数各个位上的数字的平方和加起来得到新的数字,依次往下推新数字,直到得到得到数字1(Happy number)或是与之前重复的数字(unhappy number)


解题思路:对应任何一个数,经过变换后的值最大为9 * 9 * 9, 所以开一个800的数组就可以将所有情况标记(注意开始输入的值没有必要标记,也开不了那么大的数组),碰到已经出现过的数值就可以跳出,跳出后判断当前数字是否是 1 即可

#include <cstdio>

int main() {
	int t, count = 1;
	scanf("%d", &t);
	while (t--) {
		int num, arr[800] = {0};
		scanf("%d", &num);
		int n = num, sum;
		while (1) {
			sum = 0;
			while (n != 0) {
				sum += (n % 10) * (n % 10);
				n /= 10;
			}
			if (arr[sum])
				break;
			arr[n = sum] = 1;
		}

		printf("Case #%d: %d is a%sappy number.\n", count++, num, sum == 1 ? " H" : "n Unh");
	}
	return 0;
}


你可能感兴趣的:(UVA 10591 - Happy Number)