• 1019. 数字黑洞 (20)


    原题: https://www.patest.cn/contests/pat-b-practise/1019

    思路: 本题主要就是熟练掌握字符串转整数, 整数转字符串的问题.
    注意考虑一个特殊的输入情况, 就是输入 6174

    完整实现:

    #include <stdio.h>
    
    void swap (char *a, char *b);
    void intToStr (int n, char str[]);
    void sortStr (char str[], int type); // 1 big to small
    int strToInt (char str[]);
    
    int main () {
        int n;
        int big;
        int small;
        int blackHole = 6174;
        char str[10];
    
        scanf("%d", &n);
        if (n == blackHole) {
            printf("7641 - 1467 = 6174
    "); // 给我6174? OK, 直接写死!
        } else {
            while (n != blackHole) {
                intToStr(n, str);
                sortStr(str, 1);
                big = strToInt(str);   // 拿到大数
                sortStr(str, 0);
                small = strToInt(str); // 拿到小数
                if (big == small) {
                    printf("%04d - %04d = %04d
    ", big, small, 0);
                    break;
                }
                n = big - small;
                printf("%04d - %04d = %04d
    ", big, small, n);
            }
        }
    
        return 0;
    }
    
    // 正整数整数转字符串
    // 参数: n, 待转换的整数, str[], 保存字符串的数组
    void intToStr (int n, char str[]) {
        char cur;
        int i = 0;
        while (n != 0) {
            cur = (char)(n % 10) + '0';
            str[i] = cur;
            i++;
            n = n / 10;
        }
        str[i] = '';
        // 如果转换后的字符串不足4位, 人工补0
        if (i == 1) {
            str[1] = '0';
            str[2] = '0';
            str[3] = '0';
            str[4] = '';
        } else if (i == 2) {
            str[2] = '0';
            str[3] = '0';
            str[4] = '';
        } else if (i == 3) {
            str[3] = '0';
            str[4] = '';
        }
    }
    
    // 字符串转整数
    int strToInt (char str[]) {
        char *ptr = str;
        int res = 0; // 转换后的整数
        while (*ptr != '') {
            res = res * 10 + (*ptr - '0');
            ptr++;
        }
        return res;
    }
    
    // 字符串排序, str长度必然是4
    // type等于1, 从大到小排序, 等于0, 从小到大排序
    void sortStr (char str[], int type) {
        int i;
        int j;
        for (i=1; i<=3; i++) {
            for (j=0; j<=3-i; j++) {
                if (type == 1 && str[j+1] > str[j]) {
                    swap(&str[j], &str[j+1]);
                } else if (type == 0 && str[j+1] < str[j]) {
                    swap(&str[j], &str[j+1]);
                }
            }
        }
    }
    
    // 交换两个字符变量
    void swap (char *a, char *b) {
        char temp = *a;
        *a = *b;
        *b = temp;
    }
    
    
  • 相关阅读:
    winform 调用http 通过代理出现的一系列问题
    【转】 CSS3阴影 box-shadow的使用和技巧总结
    【转】 C#程序以管理员权限运行
    【转】WMI使用的WIN32_类库名
    【转】C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher
    【转】纯CSS设置Checkbox复选框控件的样式
    【转】vs2012 打包安装更改 setup.exe的图标
    【转】VS2012程序打包部署详解
    142. Linked List Cycle II
    141. Linked List Cycle
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7711422.html
Copyright © 2020-2023  润新知