1019 数字黑洞 (20分)

#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
    int N,h,l,i,j;
    char num[5],num1[5];
    char tmp;
    cin>>N;
    do
    {
        sprintf(num,"%d",N);
        if(strlen(num)==3)
            num[3]=‘0‘;
        else if(strlen(num)==2)
        {
            num[3]=‘0‘;
            num[2]=‘0‘;
        }
        else if(strlen(num)==1)
        {
            num[3]=‘0‘;
            num[2]=‘0‘;
            num[1]=‘0‘;
        }
        for(i=0;i<3;i++)
        {
            for(j=0;j<3-i;j++)
            {
                if(num[j]<num[j+1])
                {
                    tmp=num[j];
                    num[j]=num[j+1];
                    num[j+1]=tmp;
                }
            }
        }
        num1[0]=num[3];
        num1[1]=num[2];
        num1[2]=num[1];
        num1[3]=num[0];
        h = atoi(num);
        l = atoi(num1);
        N=h-l;
        printf("%04d - %04d = %04d\n",h,l,N);
        }while(N!=6174&&N!=0);
    return 0;
}

上面的代码可以正确通过

下面的用cout+判断语句有三个样例不可以通过,不知道为什么错。

#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
    int N,h,l,i,j;
    char num[5],num1[5];
    char tmp;
    cin>>N;
    do
    {
        sprintf(num,"%d",N);
        if(strlen(num)==3)
            num[3]=‘0‘;
        else if(strlen(num)==2)
        {
            num[3]=‘0‘;
            num[2]=‘0‘;
        }
        else if(strlen(num)==1)
        {
            num[3]=‘0‘;
            num[2]=‘0‘;
            num[1]=‘0‘;
        }
        for(i=0;i<3;i++)
        {
            for(j=0;j<3-i;j++)
            {
                if(num[j]<num[j+1])
                {
                    tmp=num[j];
                    num[j]=num[j+1];
                    num[j+1]=tmp;
                }
            }
        }
        num1[0]=num[3];
        num1[1]=num[2];
        num1[2]=num[1];
        num1[3]=num[0];
        h = atoi(num);
        l = atoi(num1);
        N=h-l;
        //printf("%04d - %04d = %04d\n",h,l,N);
        cout<<num<<" - "<<num1<<" = ";
        if(N<1000&&N>=100)
            cout<<"0"<<N<<endl;
        else if(N<100&&N>=10)
            cout<<"00"<<N<<endl;
        else if(N<10)
            cout<<"000"<<N<<endl;
        else
            cout<<N<<endl;

        }while(N!=6174&&N!=0);
    return 0;
}

总结:格式化输出用printf

原文地址:https://www.cnblogs.com/QRain/p/12228321.html

时间: 2024-10-07 09:22:10

1019 数字黑洞 (20分)的相关文章

PAT Basic 1019 数字黑洞 (20 分)

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... .

PAT乙级 1019. 数字黑洞 (20)

1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 018

PAT-乙级-1019. 数字黑洞 (20)

1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 018

1019. 数字黑洞 (20)

时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 0189 = 9621962

PAT 1019. 数字黑洞 (20)

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给定

1019. 数字黑洞 (20) (数学啊 ZJU_PAT)

题目链接:http://www.patest.cn/contests/pat-b-practise/1019 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 =

PAT:1019. 数字黑洞 (20) AC(同甲级1069)

#include<stdio.h> #include<algorithm> using namespace std; const int AIM=6174; int n; int arr[4]; bool NonIncreasingOrder(int a,int b) { return a>b; } bool NonDecreasingOrder(int a,int b) { return a<b; } int toNum() //得到这个数字 { int sum=0;

PAT 1019. 数字黑洞

1019. 数字黑洞 (20) 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174

1019 数字黑洞 (20 分)

题目链接:1019 数字黑洞 (20 分) 这道题目:没有太难的地方,但是因为基础不够牢固,很多操作花的时间较长,甚至有些参考网上的方法. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int string_to_int(string str) 5 { 6 int num; 7 stringstream ss; 8 ss<<str; 9 ss>>num; 10 return num; 11 } 12 13 s