#include
#include
#include
int n, k, base[111], result[111];//base数组存放取余后的结果,因为不取余会溢出,result数组存放结果
int dfs(int res[], int len)//len表示处理的数的位数
{
k = len;
int i;
for(i = 1; i <= k; i++)
result[i] = res[i];
int t = len + 1;
if(len > 100)
return 0;
int sum = 0;
while(t--)
sum += res[t] * base[t];
if(sum % n == 0)
return 1;
int t1[111], t2[111];//t1和t2即二叉树的两个分支,假如当前数为x,那么分支即是10*x和10*x+1
memset(t1, 0, sizeof t1);
memset(t2, 0, sizeof t2);
t1[1] = 0;
t2[1] = 1;
for(i = 1; i <= len; i++)
{
t1[i + 1] = res[i];
t2[i + 1] = res[i];
}
if(dfs(t1, i))//i即len+1
return 1;
else if(dfs(t2, i))
return 1;
return 0;
}
int main(void)
{
int i, j;
while(scanf("%d", &n), n)
{
base[1] = 1;
for(i = 2; i < 101; i++)
base[i] = 10 * base[i - 1] % n;
if(dfs(base ,1))//其实这个数组可以随意定义,在这里用base只是少定义变量而已
for(j = k; j > 0; j--)
{
printf("%d", result[j]);
if(j == 1)
printf("\n");
}
}
//system("pause");
}
zoj1530 Find The Multiple
最新推荐文章于 2016-08-10 07:06:00 发布