| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
花了好几天才AC,贴个代码和测试数据吧!1.要注意几个细节,就是当某一位不够除时,商要赋零
2.如果能被当前的数整除时,就保存当前的商,以便以后除别的大小的数
#include <iostream>
#include <cstring>
using namespace std;
void copy(int b[1001],char str[1001]);
int main()
{
char str[1001];
int x=0,b[1001],a[10000],c[10000],stack[10],b_count =0,a_count = 0,c_count = 0;
int i,j,m,len;
while(cin>>str &&strcmp("-1",str)!=0)
{
memset(stack,0,sizeof(stack));
b_count =0,a_count = 0,x=0,c_count = 0;
len = strlen(str);
c_count = len;
if(len == 1)
{
cout<<"1"<<str<<endl;
continue;
}
copy(b,str);
copy(c,str);
for(i = 9;i>1;i--)
{
while(b_count<len)
{
x = x*10 + b[b_count++];
if(x<i && b_count<len)
{
if(a_count)
a[a_count++] = 0;//此处为一位不够除时加零
x = x*10 +b[b_count++];
}
a[a_count++] = x/i;
x = x%i;
if(b_count>=len &&x==0)//当可以被当前的数除尽时
{
memset(b,0,sizeof(b));
for(j= 0;j<a_count;j++)//由c数组保存中间数
{
c[j] = a[j];
b[j] = a[j];
}
c_count = a_count;
len = a_count;
stack[i]++;
i++;
if(a_count==1)
{
stack[a[0]]++;
i=0;
break;
}
b_count = 0;
a_count = 0;
memset(a,0,sizeof(a));
x = 0;
break;
}
else
if(b_count >=len &&x!=0)//当不可以被当前的数除尽时
{
if(i == 2)//当已经除到最后还无法除尽时就判定无这种数
{
memset(stack,0,sizeof(stack));
cout<<"There is no such number.";
continue;
}
memset(b,0,sizeof(b));
for(m = 0;m<c_count ;m++)
b[m] = c[m];
len = c_count;
b_count = 0;
a_count = 0;
x = 0;
memset(a,0,sizeof(a));
break;
}
}
}
for(i = 2;i<=9;i++)//输出
for(j =0;j<stack[i];j++)
cout<<i;
cout<<endl;
}
return 0;
}
void copy(int b[1001],char str[1001])
{
for(int i = 0;i<strlen(str); i++)
b[i] = str[i]-'0';
}
测试数据3317760
输出 25888899
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator