其他分享
首页 > 其他分享> > 1019 数字黑洞(用C语言精简的解决每日两题)

1019 数字黑洞(用C语言精简的解决每日两题)

作者:互联网

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int compare(const void *a,const void *b){  //qsot的第四个参数,按递减顺序
    return (*(char *)b)-(*(char *)a);
}
char *srev(char *n){  //字符串的反转函数,返回值是反转后的字符串
    int i=0;
    int j=strlen(n)-1;
    char temp;
    while(i<j){
        temp=*(n+j);
        *(n+j)=*(n+i);
        *(n+i)=temp;
        i++;
        j--;
    }
    return n;
}
int main(){
    char n[5];
    int answer=0;
    scanf("%s",n);
    strncat(n,"000",4-strlen(n));  //一个坑人点,如果输入1,需要把它变成1000
    while(answer!=6174){ //6174是循坏结束点
        qsort(n,4,sizeof(char),compare);  //排序
        answer=atoi(n)-atoi(srev(n));  //计算差值 ,注意这里字符串已经反转过一次
        if(answer==0){  //如果结果是0,说明字符串是1111,2222这样的,直接输出0000,然后结束循环
            printf("%s - %s = 0000\n",n,n);
            break;
        }
        else{  
            printf("%s -",srev(n)); //因为前面已经翻转一次,所以这里要反转
            printf(" %s =",srev(n));  //前面已经翻转两次,这里也要翻转
            printf(" %.4d\n",answer);  //“注意每个数字按 4 位数格式输出”
        }
        sprintf(n,"%.4d",answer);  //要把每次算出的差值作为新的字符串进行下一次循环
    }
return 0;
}

1.开始发现了一个函数叫strrev,但不是c的标准库函数,所以自己就写了一个srev

2.一个坑人点,如果输入的数不是四位,需要在后面补上0补成四位(真的真的真的很坑人)

3.注意输出格式,一定也要是四位的,不够前面补0

4.为什么不写成 printf("%s - %s = %.4d\n",srev(n),srev(n),answer)呢?因为这样写不行

标签:int,C语言,char,answer,字符串,1019,printf,精简,srev
来源: https://blog.csdn.net/weixin_45828712/article/details/120590127