数字黑洞Kaprekar常数介绍
什么是数字黑洞?Kaprekar常数又是什么?这些问题可能是我们日常工作会见到的。通过这个问题,希望你能收获更多。下面是揭开这些问题的详细内容。
题目描述给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到7766-6677=10899810-0189=96219621-1269=83528532-2358=61747641-1467=6174......现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入给出一个(0,10000)区间内的正整数N。
如果N的4位数字全相等,则在一行内输出“N-N=0000”;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例,每行中间没有空行。注意每个数字按4位数格式输出。
6767
7766-6677=10899810-0189=96219621-1269=83528532-2358=6174参考代码:
#include<stdio.h>#include<stdlib.h>intstr_to_int(constvoid*str){char*s=(char*)str;inti;for(i=0;i<4;i++){if(s[i]=='\0')s[i]='0';}return(s[0]-'0')*1000+(s[1]-'0')*100+(s[2]-'0')*10+(s[3]-'0');}voidint_to_str(constintnum,char*str){str[0]=num/1000+'0';str[1]=num/100%10+'0';str[2]=num/10%10+'0';str[3]=num%10+'0';}intcomp_min(constvoid*a,constvoid*b){return*(char*)a-*(char*)b;}intcomp_max(constvoid*a,constvoid*b){return-(*(char*)a-*(char*)b);}intmain(){charstr[4]={'0','0','0','0'};intmax=0,min=0,res_num=0;scanf("%s",str);res_num=str_to_int(str);qsort(str,4,sizeof(char),comp_min);min=str_to_int(str);qsort(str,4,sizeof(char),comp_max);max=str_to_int(str);do{if(max-min==0){printf("%04d-%04d=0000\n",max,min);break;}elseif(max<=0||max>=10000||min<=0||min>=10000)break;printf("%d-%04d=%d\n",max,min,max-min);res_num=max-min;int_to_str(max-min,str);qsort(str,4,sizeof(char),comp_min);min=str_to_int(str);qsort(str,4,sizeof(char),comp_max);max=str_to_int(str);}while(res_num!=max-min);return0;}
以上就是数字黑洞Kaprekar常数的详细内容了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注亿速云行业资讯!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。