首页 > 代码库 > Ugly Problem
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.
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 (1≤s≤101000).
For each test case, there is only one line describing the given integer s (1≤s≤101000).
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
2181000000000000
Sample Output
Case #1:299Case #2:29999999999991
Hint
9 + 9 = 18999999999999 + 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:\n%d\n",++cas,cnt); rep(i,0,cnt-1)printf("%s\n",ans[i]); } //system("Pause"); return 0;}
Ugly Problem
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。