• Ugly Problem


    Ugly Problem

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Special Judge


    Problem Description
    Everyone hates ugly problems.

    You are given a positive integer. You must represent that number by sum of palindromic numbers.

    A palindromic number is a positive integer such that if you write out that integer as a string in decimal without leading zeros, the string is an palindrome. For example, 1 is a palindromic number and 10 is not.
     
    Input
    In the first line of input, there is an integer T denoting the number of test cases.

    For each test case, there is only one line describing the given integer s (1s101000).
     
    Output
    For each test case, output “Case #x:” on the first line where x is the number of that test case starting from 1. Then output the number of palindromic numbers you used, n, on one line. n must be no more than 50. �en output n lines, each containing one of your palindromic numbers. Their sum must be exactly s.
     
    Sample Input
    2 18 1000000000000
     
    Sample Output
    Case #1: 2 9 9 Case #2: 2 999999999999 1
    Hint
    9 + 9 = 18 999999999999 + 1 = 1000000000000
    分析:找一个较大回文数,然后大数相减;
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define vi vector<int>
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    #define pii pair<ll,int>
    #define Lson L, mid, ls[rt]
    #define Rson mid+1, R, rs[rt]
    const int maxn=1e3+10;
    using namespace std;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
    inline ll read()
    {
        ll x=0;int f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,m,k,t,cnt,cas;
    char a[maxn],ans[52][maxn];
    string gao(string a, string b){
        int lena = a.length();
        int lenb = b.length();
        int len = max(lena, lenb) + 5;
        char res[len];
        memset(res, 0, sizeof(res));
        int flag, reslen = len;
        len--;
        res[len] = 0;
        len--;
        lena--; lenb--;
        flag = 0;
        while(lenb >= 0){
            res[len] = a[lena--] - b[lenb--] + '0' - flag;
            flag = 0;
            if(res[len] < '0'){
                flag = 1;
                res[len] = res[len] + 10;
            }
            len--;
        }
        while(lena >= 0){
            res[len] = a[lena--] - flag;
            flag = 0;
            if(res[len] < '0'){
                flag = 1;
                res[len] = res[len] + 10;
            }
            len--;
        }
        while((res[flag] == 0 || res[flag] == '0') && flag < reslen) flag++;
        if(flag == reslen) return "0";
        return res + flag;
    }
    void find(char*p,int now)
    {
        int i,len=strlen(p);
        ans[now][len]=0;
        for(int i=0;i<(len+1)/2;i++)
            ans[now][i]=ans[now][len-1-i]=p[i];
        bool flag=false;
        for(int i=len/2-1;i>=0;i--)
        {
            if(p[i]<p[len-1-i])break;
            else if(p[i]>p[len-1-i])
            {
                ans[now][i]--;
                ans[now][len-1-i]--;
                for(int j=i+1;j<len-1-i;j++)ans[now][j]=ans[now][len-1-j]='9';
                break;
            }
        }
        for(i=0;ans[now][i]=='0';i++)
        {
            ans[now][len-1-i]='9';
        }
        strcpy(ans[now],ans[now]+i);
        strcpy(a,gao(p,ans[now]).c_str());
    }
    int main()
    {
        int i,j;
        scanf("%d",&t);
        while(t--)
        {
            cnt=0;
            scanf("%s",a);
            while(strcmp(a,"0")!=0)
            {
                find(a,cnt);
                cnt++;
            }
            printf("Case #%d:
    %d
    ",++cas,cnt);
            rep(i,0,cnt-1)printf("%s
    ",ans[i]);
        }
        //system("Pause");
        return 0;
    }
     
  • 相关阅读:
    【Python3】操作文件,目录和路径
    Python中的文件和目录操作实现
    【Python 2 到 3 系列】 此整型非彼整型
    【Python 2 到 3 系列】 print 是函数
    css网页中设置背景图片的方法详解
    (转)开源项目miaosha(下)
    (转)开源项目miaosha(上)
    (转)开源项目t-io
    (转)WebSocket学习
    缓存问题参考
  • 原文地址:https://www.cnblogs.com/dyzll/p/5950661.html
Copyright © 2020-2023  润新知