----------------解决方案--------------------------------------------------------
E-mai:liwei_biti@sina.com
----------------解决方案--------------------------------------------------------
给出一个正整数n,请找出一个最小正整数m,使m*n由0或1组成。
例子:n=3,m=37,3*37=111;
----------------解决方案--------------------------------------------------------
因为昨天晚上有课所以刚刚看到,谢谢idealistic33的帮助。由于是初学,望多多指教!
#include <stdio.h>
void Panduan(int n,int *k)
{
if(n!=0)
{
if(n%10==0 || n%10==1)
{
Panduan(n/10,k);
}
else
{
*k=0;
}
}
}
int Su(int n) //判断是否符合每位都是 1 或0
{
int temp=0,i,k;
for(i=0;i<65535;i++,k=1)
{
Panduan(i*n,&k);
if(k==1)
{
temp=i;
break;
}
}
return temp;
}
void main()
{
int n,m;
printf("请您输入一个数:");
scanf("%d",&n);
Panduan(n,&m);
m=Su(n);
if(m==0)
printf("对不起!这个数字太大了,超出了int的范围!\n");
else
printf("这个数是:%d. %d*%d=%d",m,n,m,m*n);
}
----------------解决方案--------------------------------------------------------
//衷心谢谢楼主,费心了, 我很想知道 如果m*n超出了long的范围怎么算?敢问楼主帮考虑下!
//下面是我编的程序,我对指针不怎么懂。所以没用指针。
#include<iostream.h>
//////数字为二进制
bool Binary(long n)
{
long i;
i = n;
while(i>0)
{
if( i%10 > 1 )
return false;
else
i /= 10;
}
return true;
}
void main()
{
long num;
do{
cout<<"输入一正整数: ";
cin>>num;
}while(num <= 0);
for(long i=1; !Binary(i*num); i++);
cout << i << endl;
cout << num << '*' << i << '=' << i*num << endl;
}
// 注: 本程序如果“题目中要求的 m*n 很大, 超出了long的范围则计算不了”
// 有志之士帮修改下, 谢谢指正。
[此贴子已经被作者于2005-3-3 21:58:49编辑过]
----------------解决方案--------------------------------------------------------
9*123456789=111111111 我又乱写了...应该是12345679
[此贴子已经被作者于2005-3-3 23:32:36编辑过]
----------------解决方案--------------------------------------------------------
我也想要加入啊! 我的邮箱:gvtbs@sina.com
----------------解决方案--------------------------------------------------------
int fun(int N); void fun1(int Temp); unsigned long TEMP=0 ; main() { int N ; int Temp ; unsigned long S ; scanf("%d",&N); Temp=1<<(fun(N)-1); //printf("%d\n",Temp); while(1) { TEMP=0 ; fun1(Temp); //printf("TEMP=%lu\n",TEMP); if(!(TEMP%N)) { printf("%d * %lu = %lu \n",N,TEMP/N,TEMP); break ; } if(TEMP==1111111111) { printf("超出本程式计算范围!"); break ; } Temp++; } } int fun(int N) { int T=0 ; while(N)T++,N/=10 ; return T ; }
void fun1(int Temp) { if(Temp)fun1(Temp>>1),TEMP*=10,TEMP=TEMP+(Temp&0x01); }
没测试,感觉应该这个算法更快
----------------解决方案--------------------------------------------------------
由于明天要交作业所以今天晚上实在没有时间做了,请原谅!我还以只能用C语言编呢!
----------------解决方案--------------------------------------------------------
我想是不是超过long要自定义一个类型了?
----------------解决方案--------------------------------------------------------