| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 469 人关注过本帖
标题:求助!谢谢高人指点。。。。。。
只看楼主 加入收藏
寒夜秋风3
Rank: 2
等 级:论坛游民
帖 子:25
专家分:22
注 册:2010-3-24
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
求助!谢谢高人指点。。。。。。
/*求助,我想用这个小程序求300以内的阶乘。值是可以算出来的,但是前面不知道怎么去掉多余了很多的“000000”谢谢高人指点,本人初学C,谢谢各位啦*/


#include <stdio.h>
#include <math.h>
void main()
{
    int a[256],b,d;
    long m;
    int n,i,j,r;
    printf("value of n:\n");
    scanf("%d",&n);
    m=(long)log(n)*n/6+2;
    a[1]=1;
    for(i=2;i<m;i++)
        a[i]=0;
    d=0;
    for(i=2;i<=n;i++)
    {
     for(j=1;j<m;j++)
        {
            b=a[j]*i+d;
            a[j]=b%1000000;
            d=b/1000000;
        }  
        if(d>0)
            a[j]=d;
    }

    i=m;
    r=1;
    do
    {i--;
    r++;
    }while(a[i]==0);


    printf("%d!=",n);
    for(i=r-15;i>=1;i--)
    {
        if(a[i]>99999)
        {
            printf("%d  ",a[i]);
            continue;}

    else if(a[i]>9999)
    {printf("0%d  ",a[i]);
    continue;
    }
   
    else if(a[i]>999)
    {printf("00%d  ",a[i]);
    continue;}

    else if(a[i]>99)
    {printf("000%d  ",a[i]);
    continue;}

    else if(a[i]>9)
    {printf("0000%d  ",a[i]);
    continue;}

    else
        printf("000000%d  ",a[i]);

    }
}
搜索更多相关主题的帖子: 高人 
2010-03-25 10:54
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:20 
    i=m;
    r=1;
    do
    {i--;
    r++;
    }while(a[i]==0);
    printf("%d!=",n);
    for(i=r-15;i>=1;i--)
    {
        if(a[i]>99999)
        {
            printf("%d  ",a[i]);
            continue;}
    else if(a[i]>9999)
    {printf("0%d  ",a[i]);
    continue;
    }
      else if(a[i]>999)
    {printf("00%d  ",a[i]);
    continue;}
    else if(a[i]>99)
    {printf("000%d  ",a[i]);
    continue;}

    else if(a[i]>9)
    {printf("0000%d  ",a[i]);
    continue;}
    else
        printf("000000%d  ",a[i]);
    }
改成
    do
    {
        m--;
    }while(a[m]==0);

    printf("%d != ",n);
    printf("%d ", a[m]);
    for(i = m-1; i>=1; i--)
    {
        printf("%06d ", a[i]);
    }
    printf("\n");
2010-03-25 13:54
寒夜秋风3
Rank: 2
等 级:论坛游民
帖 子:25
专家分:22
注 册:2010-3-24
收藏
得分:0 
回复 2楼 ldg628
谢谢你!
真的是差距呀!佩服。。。。不过本人资质劣拙,还请帮忙指点一下哪儿错了。。。不胜感激。。。
2010-03-25 17:27
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
do
    {i--;
    r++;
    }while(a[i]==0);
你的上面这个循环为的是找出最高位不为0的元素坐标,当a[i]不等于0时退出循环,此时的i就是最高位的坐标,可以直接用%d打印它的值,可以去掉无效的0
然后就是一一把剩下的值打印出来,用for(i=r-15;i>=1;i--) 我不知道你是想要干什么,这时我们应该是从第i-1位元素开始打印了,直到最低位1,即
for (i = i-1; i >= 1; i--) ,然后每一个元素我们要求显示6位数是有效的数字,用%06d就可以搞定了,不用那么麻烦用一堆的if。。。

希望对你有帮助。。。
2010-03-25 17:48
寒夜秋风3
Rank: 2
等 级:论坛游民
帖 子:25
专家分:22
注 册:2010-3-24
收藏
得分:0 
回复 4楼 ldg628
很感谢您!我是那个do  while 语句想偏了。。。谢谢提醒,还有我感觉我的基础好差哦。刚才你这么“%06d”一说,我才恍然大悟。。。太感谢了
2010-03-25 22:54
csj_65
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:63
专家分:163
注 册:2010-3-12
收藏
得分:0 
再这样改之前把long m;变成int m;先
2010-03-26 11:22
快速回复:求助!谢谢高人指点。。。。。。
数据加载中...
 
   



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

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