| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 830 人关注过本帖
标题:一个很短的问题
只看楼主 加入收藏
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:0 
哈哈···弄好了···

好辛苦的说··调试了好久··草稿纸都用了3张了··

但是··LZ··我担心你看不懂···

其实很简单的···

我在继续完善一下····

等下发上来···
2010-10-20 00:43
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:0 
这个是一个递归版本···我暂时先写的这个··

LZ下来可以自己试试换成一个循环的版本···建议用一个13个char的数组来存放要输出的字符串。

先上图···

图片附件: 游客没有浏览图片的权限,请 登录注册


在上代码:

程序代码:
#include<stdio.h>
#include<stdlib.h>

#define CLSIO  { int c; while( (c=getchar())!='\n' && c!=EOF ); }

int dissociaton( long n , int d ) ;    // 分解N

int main( void )
{
    int   iput = 1 ;  // 记录输入状况和EOF

    while(iput)
    {

         puts ("输入:一个数 N (0<=N<=1000000000)");
         puts ("找到最小的正整数Q,使得Q的各位数的乘积等于N");
         puts ("如果不存在Q,输出-1\n");

         long  num      ;  // 获取N
         int   div  = 9 ;  // N要除以的数

         if ( ( iput=scanf("%d" , &num) ) != 1  ||  iput==EOF || num<0 || num>1000000000 )

            exit(EXIT_FAILURE) ;


         if ( num < 10 )
            printf( "%d\n" , num+10 ) ;
         else
            dissociaton( num , div )  ;


         CLSIO   ;

         puts ("\n\n---------------华丽的分割线线---------------\n\n");
    }

    return 0 ;
}


int dissociaton( long n , int d )
{
    if ( d<2 ) return 0 ;

    if ( n%d ) dissociaton( n , d-1 ) ;

    else
    {
        if ( n == d )
           {
               putchar( n +'0') ;
               return 1 ;
           }
        else
           {

               if ( dissociaton( n/d , d ) )

                  putchar( d + '0' ) ;
           }
    }
}




[ 本帖最后由 日的起烟烟 于 2010-10-23 20:07 编辑 ]
2010-10-20 01:17
tangjingwei
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-11-6
收藏
得分:0 
回复 12楼 日的起烟烟
谢谢,辛苦了
2010-10-20 13:28
weiqiang
Rank: 2
等 级:论坛游民
帖 子:48
专家分:52
注 册:2010-10-18
收藏
得分:0 
我也不懂
2010-10-20 21:42
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:0 
送上一个循环版本··
程序代码:
#include<stdio.h>
#include<stdlib.h>

#define CLSIO  { int c; while( (c=getchar())!='\n' && c!=EOF ); }

void dissociaton( long n ) ;    // 分解N

int main( void )
{
    int   iput = 1 ;  // 记录输入状况和EOF

    while(iput)
    {

         puts ("输入:一个数 N (0<=N<=1000000000)");
         puts ("找到最小的正整数Q,使得Q的各位数的乘积等于N");
         puts ("如果不存在Q,输出-1\n");

         long  num      ;  // 获取N
         int   div  = 9 ;  // N要除以的数

         if ( ( iput=scanf("%d" , &num) ) != 1  ||  iput==EOF || num<0 || num>1000000000 )

            exit(EXIT_FAILURE) ;


         dissociaton( num )  ;


         CLSIO   ;

         puts ("\n\n---------------华丽的分割线线---------------\n\n");
    }

    return 0 ;
}


void dissociaton( long n )
{

    char out[13] = {'\0'} ;
    int  idx=11, div =  9 ;

    if ( n<10 ) printf( "%d\n" , n+10 ) ;

    else
    {
        while ( n!=1 && div>1 )
        {
             if ( n%div ) --div;
             else
             {
                out[idx--] = div +'0' ;
                n/=div ;
             }
        }

        div<2 ? puts("-1") : puts(out+idx+1) ;
    }
}



 

[ 本帖最后由 日的起烟烟 于 2010-10-23 20:09 编辑 ]
2010-10-20 23:56
快速回复:一个很短的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040864 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved