2010-1132
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
题目大意:为对一个整数N,求N的倍数中能用最少数字表示的数,有小于等于8位时输出最小的这种倍数,否则随意输入一个这种倍数。
可以证明,N的倍数中总有只含有0和1的数。[[BR]]
如下表1[[BR]]
11[[BR]]
111[[BR]]
1111[[BR]]
11111[[BR]]
……
列出N+1行后,总有两行的余数相等,这两行的差就是一个只用0和1表示的N的倍数。这样就可以直接构造一个这种数[[BR]]
对于小于等于8位的情况,因为这类数只有512个,所以可以直接枚举。
代码如下:
{{{
#!cpp
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int base[10]={1,10,100,1000,10000,100000,1000000,10000000};
int turn(int t)
{
int ret=0,k=0;
while (t>0)
{
if (t%2)
{
ret+=base[k];
}
k++;
t/=2;
}
return ret;
}
int mod[100000];
void invalid_output(int n)
{
int k=1,d=1,i;
while (k!=0 && mod[k]==0)
{
mod[k]=d;
k*=10;
k+=1;
k%=n;
d++;
}
// printf("%d %d\n",d,mod[k]);
cout<<"Invalid ";
for (i=d;i>mod[k];i--) printf("1");
for (i=mod[k];i>0;i--) printf("0");
cout<<" (Base 2)"<<endl;
}
int main()
{
int n,t,x,i;
bool finish;
while (cin>>n)
{
memset(mod,0,sizeof(mod));
finish=false;
for (t=1;t<256;t++)
{
x=turn(t);
if (x%n==0)
{
finish=true;
break;
}
}
if (finish)
cout<<"Valid "<<x<<" (Base 2)"<<endl;
else
invalid_output(n);
}
return 0;
}
}}}
by pxhdg
题目大意:为对一个整数N,求N的倍数中能用最少数字表示的数,有小于等于8位时输出最小的这种倍数,否则随意输入一个这种倍数。
可以证明,N的倍数中总有只含有0和1的数。
如下表1
11
111
1111
11111
……
列出N+1行后,总有两行的余数相等,这两行的差就是一个只用0和1表示的N的倍数。这样就可以直接构造一个这种数
对于小于等于8位的情况,因为这类数只有512个,所以可以直接枚举。
代码如下:
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int base[10]={1,10,100,1000,10000,100000,1000000,10000000};
int turn(int t)
{
int ret=0,k=0;
while (t>0)
{
if (t%2)
{
ret+=base[k];
}
k++;
t/=2;
}
return ret;
}
int mod[100000];
void invalid_output(int n)
{
int k=1,d=1,i;
while (k!=0 && mod[k]==0)
{
mod[k]=d;
k*=10;
k+=1;
k%=n;
d++;
}
// printf("%d %d\n",d,mod[k]);
cout<<"Invalid ";
for (i=d;i>mod[k];i--) printf("1");
for (i=mod[k];i>0;i--) printf("0");
cout<<" (Base 2)"<<endl;
}
int main()
{
int n,t,x,i;
bool finish;
while (cin>>n)
{
memset(mod,0,sizeof(mod));
finish=false;
for (t=1;t<256;t++)
{
x=turn(t);
if (x%n==0)
{
finish=true;
break;
}
}
if (finish)
cout<<"Valid "<<x<<" (Base 2)"<<endl;
else
invalid_output(n);
}
return 0;
}
by pxhdg