您好,登錄后才能下訂單哦!
什么是數字黑洞?Kaprekar常數又是什么?這些問題可能是我們日常工作會見到的。通過這個問題,希望你能收獲更多。下面是揭開這些問題的詳細內容。
給定任一個各位數字不完全相同的4位正整數,如果我們先把4個數字按非遞增排序,再按非遞減排序,然后用第1個數字減第2個數字,將得到 一個新的數字。一直重復這樣做,我們很快會停在有“數字黑洞”之稱的6174,這個神奇的數字也叫Kaprekar常數。 例如,我們從6767開始,將得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 現給定任意4位正整數,請編寫程序演示到達黑洞的過程。
輸入給出一個(0, 10000)區間內的正整數N。
如果N的4位數字全相等,則在一行內輸出“N - N = 0000”;否則將計算的每一步在一行內輸出,直到6174作為差出現,輸出格式見樣例,每行中間沒有空行。注意每個數字按4位數格 式輸出。
6767
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174
#include<stdio.h> #include<stdlib.h> int str_to_int(const void *str) { char *s=(char *)str; int i; 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'); } void int_to_str(const int num,char *str) { str[0]=num/1000+'0'; str[1]=num/100%10+'0'; str[2]=num/10%10+'0'; str[3]=num%10+'0'; } int comp_min(const void *a,const void *b) { return *(char*)a-*(char*)b; } int comp_max(const void *a,const void *b) { return -(*(char*)a-*(char*)b); } int main() { char str[4]={'0','0','0','0'}; int max=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; }else if(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); return 0; }
以上就是數字黑洞Kaprekar常數的詳細內容了,看完之后是否有所收獲呢?如果想了解更多相關內容,歡迎關注億速云行業資訊!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。