一道ACM题目,求C语言解决代码!

输入:一个正整数m
输出:一个最小正整数n,n是m的整数倍且完全由0和1组成
例如:m=3,n=111=37*3
我的问题是无论我输入的数有多大(小于100位),都能正常的显示结果, 如果实现方法复杂,希望有注释

第1个回答  2009-05-12
#include <stdio.h>
#define MAX 10000
//设置查找范围
int f(int a)
{
int b=1;
int m=1;
while(a)
{
b=b+(9+a%2)*m;
m=m*10;
a=a/2;
}
return b%m;
//将a转换为二进制数(当然用十进制表示)
//即得到所需要的用1,0构成的十进制数
//具体过程可以在纸上模拟一下,相信你可以的
}
void main()
{
int n=1;int b,m;
scanf("%d",&m);
while((b=f(n))<MAX)
{
if(b%m==0)
break;
else
n++;
}
if(b<MAX)
printf("%d*%d=%d\n",m,b/m,b);
else
printf("超出寻找范围!\n");
getchar();
getchar();
}
第2个回答  2009-05-13
#include <stdio.h>
#include <stdlib.h>

int main()
{
int n, *remainList;
int rndStart=1, rndRemain=1, i;
char result[40];
remainList = (int*)malloc(1024*1024);
remainList[0] = 0;
scanf("%d", &n);
while (1)
{
for (i=rndStart; i<rndStart*2; ++i)
{
remainList[i] = (remainList[i-rndStart] + rndRemain)%n;
if (remainList[i] == 0)
{
itoa(i, result, 2);
printf("%s", result);
return;
}
}
rndStart <<= 1;
rndRemain = (rndRemain * 10) % n;
}
}

上面malloc那里应该申请尽量多的内存, 我这个申请1m内存还是可能在一些很小的数(几万)上面越界
输入数据100位? 如果这是原题要求的话,说明有一种特别直接的算法没发现。 如果原题没这要求你自己提的要求的话,只能无视了
第3个回答  2009-05-12
#include <stdio.h>

int main(void)
{
long m;
long n;
long t;
long s;
int ok = 0;

printf("input an int number:");
scanf("%ld", &m);

n = 0;
if (m % 2 == 0 && m % 10 != 0)
{
s = m * 5;
}
else
{
s = m;
}

while(ok == 0)
{
n += s;
t = n;
while (t > 0)
{
if (t % 10 == 0 || t % 10 == 1)
{
t /= 10;
ok = 1;
}
else
{
ok = 0;
break;
}
}
}

printf("%ld", n);
}本回答被提问者采纳
第4个回答  2009-05-15
你想说的是东北大学最近举办的沈阳省赛网络赛的E题吗?

如果是的话,那道题的数据量是n<10000,没你那么大
即使是10000,上面的几个暴力的程序也过不了,因为是1000ms的题
这道题有人用bfs过了,应该是逐位的bfs,同时用数学方法进行剪枝
说实话,这道题我比赛时也没ac,我当时暴力做超时,dp又超空间了
相似回答