吴冰燕 2023-04-06 09:46 采纳率: 84%
浏览 45
已结题

数字黑洞(C语言、C++)

题目描述
任意一个四位正整数(4位数字相同者除外), 将各位数字组成一个最大数和最小数,两数相减并重复这一过程必得6174。

输入格式
输入一个四位正整数。

输出格式
输出文件包含多行, 组成一个最大数和一个最小数就输出一行,直道结果为6174。

样例
输入数据 1
4123
输出数据 1
4321-1234=3087
8730-378=8352
8532-2358=6174

  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2023-04-06 10:02
    关注

    那就做一个函数专门拆解整数,得到最大数和最小数,然后不断按照规则循环,直到获得6174

    #include <stdio.h>
    void func(int n,int *max,int *min)
    {
        int a[4],i,j,t;
        a[0] = n/1000;
        a[1] = n%1000/100;
        a[2] = n%100/10;
        a[3] = n%10;
        for(i=0;i<3;i++)
            for(j=0;j<3-i;j++)
            {
                if(a[j] < a[j+1])
                {
                    t = a[j];
                    a[j] = a[j+1];
                    a[j+1] = t;
                }
            }
        *max = 0;
        for(i=0;i<4;i++)
            *max = *max * 10 + a[i];
        *min = 0;
        for(i=3;i>=0;i--)
            *min = *min * 10 + a[i];
    
    }
    int main()
    {
        int n,max,min;
        scanf("%d",&n);
        while(n!=6174)
        {
            func(n,&max,&min);
            printf("%d-%d=%d\n",max,min,max-min);
            n=max-min;
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 yolov8边框坐标
  • ¥15 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真