当前位置: 代码迷 >> C语言 >> 愿意为他人义务编函数
  详细解决方案

愿意为他人义务编函数

热度:131   发布时间:2005-03-02 10:39:00.0
愿意为他人义务编函数
为了更好的学习C语言,本人愿意为他人义务编写一些简单的功能函数(千万别太难),但最好不是老师留的作业。
搜索更多相关的解决方案: 函数  义务  

----------------解决方案--------------------------------------------------------
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要自定义一个类型了?
----------------解决方案--------------------------------------------------------
  相关解决方案