关闭

6174问题

380人阅读 评论(0) 收藏 举报
分类:
输入一个n位数,用大序减去小序,然后继续对结果这样操作,输出操作序列,知道出现循环。
样例输入:1234
样例输出:1234 -> 3087 -> 8532 -> 6147 -> 6147

解释:
输入1234

得4321-1234=3087、8730-378=8352、8532-2358=6174、7164-1467=6174这里变成了无限循环,结束。


#include<stdio.h>
#include<string.h>
int get_next(int x);

int main() {
	int num[2000], count;
	scanf("%d", &num[0]);
	printf("%d", num[0]);
	count = 1;
	while(1) {
		num[count] = get_next(num[count-1]);
		printf(" -> %d", num[count]);
		int found = 0;
		int i;
		for (i = 0; i < count; i++)
			if (num[i] == num[count]) {
				found = 1;
				break;
			}
		if (found)
			break;
		count++;
	}
	printf("\n");
	return 0;
}

int get_next(int x) {
	int a,b,n;
	int i,j;
	char s[10];
	//把x转换为字符串保存在s里
	sprintf(s, "%d", x);
	n = strlen(s);
	for (i = 0; i < n; i++) 
		for (j = i + 1; j < n; j++)
			if (s[i] > s[j]) {
				char temp = s[j];
				s[j] = s[i];
				s[i] = temp;
			}
	//把s转换为数字保存在b
	sscanf(s, "%d", &b);
	//开始和结尾相对应的互换
	for (i = 0; i < n/2; i++) {
		char t = s[i];
		s[i] = s[n-1-i];
		s[n-1-i] = t;
	}
	sscanf(s, "%d", &a);
	return a - b;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:60172次
    • 积分:1500
    • 等级:
    • 排名:千里之外
    • 原创:93篇
    • 转载:12篇
    • 译文:2篇
    • 评论:5条
    文章分类
    最新评论