原题:https://codeforces.com/contest/1352/problem/A
题意:t组数,将每个数分解成首位不为零而后面全为零的k个数,先输出k再输出k个数
思路:一开始把n当做整数来考虑,分解的时候想着从10开始向上依次分解,到余数为零的时候跳出(for循环的话不清楚n的长度)。
memset(a,0,sizeof(a));
cin>>x;
sum=1;
i=10;
while(x%i!=0){
a[sum]=x%i;
x=x-a[sum];
sum++;
i=i*10;
}
a[sum]=x;
然后发现53001不行,就把n换成string类型试了试,过了,但感觉可以优化。
#include <bits/stdc++.h>
using namespace std;
int t,sum,i,l;
char a[1000];
string x;
int main()
{
cin>>t;
while(t--)
{
memset(a,0,sizeof(a));
cin>>x;
sum=0;
i=0;
l=x.length();
while(i<l)
{
if(x[i]!='0')
{
a[i]=x[i];
sum++;
}
//sum++;
i++;
}
cout<<sum<<endl;
for(i=0; i<l; i++)
if(a[i]>'0'&&a[i]<='9')
{
cout<<a[i];
for(int j=1; j<l-i; j++)
cout<<'0';
cout<<' ';
}
cout<<endl;
}
}