098.卡布列克常数

举报
C语言与CPP编程 发表于 2022/05/03 23:59:15 2022/05/03
【摘要】 #include<stdio.h>void vr6174(int);void parse_sort(int num,int *each);void max_min(int *each,int *max,int *min);void parse_sort(int num,int *each);int count=0;void ...

  
  1. #include<stdio.h>
  2. void vr6174(int);
  3. void parse_sort(int num,int *each);
  4. void max_min(int *each,int *max,int *min);
  5. void parse_sort(int num,int *each);
  6. int count=0;
  7. void main()
  8. {
  9. int n=1;
  10. clrscr();
  11. puts("**************************************************************");
  12. puts("* This program is to verify Comgrich Content. *");
  13. puts("* That is any 4-digit number whose digitals are not the same *");
  14. puts("* has the rule: (1) range the 4 digits to get the maximum *");
  15. puts("* 4-digit number, (2) range the 4 digits to get the minimum *");
  16. puts("* 4-digit number, (3) get the difference of these two numbers*");
  17. puts("* that is a new 4-digit number. Continute to calculate with *");
  18. puts("* (1)-(3),the result in the end is 6174,the Comgrich Content.*");
  19. puts("**************************************************************");
  20. while(n!=0)
  21. {
  22. printf(" >> Please input a 4-digit number to verify(0 to quit): ");
  23. scanf("%d",&n); /*输入任一整数*/
  24. if(n==0)
  25. break;
  26. printf(" >> ------ Results of verification: ------------\n");
  27. count=0;
  28. vr6174(n); /*调用函数进行验证*/
  29. printf(" >> ---------------------------------------------\n");
  30. }
  31. puts("\n Press any key to quit...");
  32. getch();
  33. }
  34. void vr6174(int num)
  35. {
  36. int each[4],max,min;
  37. if(num!=6174&&num) /*若不等于74且不等于0则进行卡布列克运算*/
  38. {
  39. parse_sort(num,each); /*将整数分解,数字存入each数组中*/
  40. max_min(each,&max,&min); /*求数字组成的最大值和最小值*/
  41. num=max-min; /*求最大值和最小值的差*/
  42. printf(" >> Step No.%d: %d-%d=%d\n",++count,max,min,num); /*输出该步计算过程*/
  43. vr6174(num); /*递归调用自身继续进行卡布列克运算*/
  44. }
  45. }
  46. void parse_sort(int num,int *each)
  47. {
  48. int i,*j,*k,temp;
  49. for(i=0;i<=4;i++) /*将NUM分解为数字*/
  50. {
  51. j=each+3-i;
  52. *j=num%10;
  53. num/=10;
  54. }
  55. for(i=0;i<3;i++) /*对各保数字从小到大进行排序*/
  56. for(j=each,k=each+1;j<each+3-i;j++,k++)
  57. if(*j>*k) { temp=*j;*j=*k;*k=temp;}
  58. return;
  59. }
  60. void max_min(int *each,int *max,int *min) /*将分解的数字还原为最大整数和最小整数*/
  61. {
  62. int *i;
  63. *min=0;
  64. for(i=each;i<each+4;i++) /*还原为最小的整数*/
  65. *min=*min*10+*i;
  66. *max=0;
  67. for(i=each+3;i>=each;i--) /*还原为最大的整数*/
  68. *max=*max*10+*i;
  69. return;
  70. }

文章来源: blog.csdn.net,作者:程序员编程指南,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/124558375

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。