| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 485 人关注过本帖
标题:求解C语言动态数组方面问题
只看楼主 加入收藏
青青绿豆
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-21
结帖率:100%
收藏
 问题点数:0 回复次数:7 
求解C语言动态数组方面问题
我是新手求大神指教!
原题大意是“输入x,y(0<x<366;y取0~9),求出x的阶乘值中出现y数字的次数。”
我认为核心部分是能求365的阶乘对吗?怎么破?
搜索更多相关主题的帖子: 动态 C语言 
2015-04-23 10:25
青青绿豆
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-21
收藏
得分:0 
不相信这论坛大神少~~~求关注~~~
2015-04-23 23:46
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
把数字变成一个个单个数放到数组中

一片落叶掉进了回忆的流年。
2015-04-24 00:00
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
#include<stdio.h>int *a(int a[10000]){    int i;    for(i=0;i<=10000;i++)    {        if(a[i]>9)        {            a[i+1]+=(a[i]-a[i]%10)/10;            a[i]=a[i]%10;            }        }        return a;    }int main(){    int A[10000],n,i,j,count;    A[0]=1;    scanf("%d",&n);    for(i=1;i<10000;i++)    A[i]=0;    for(i=1;i<=n;i++)    {    for(j=0;j<10000;j++)        A[j]=A[j]*i;            a(A);                }                int c=0;        for(i=9999;A[i]==0;i--);        for(c=i;c>=0;c--)        printf("%d",A[c]);        return 0;    }

一片落叶掉进了回忆的流年。
2015-04-24 00:05
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
程序代码:
#include<stdio.h>
int *a(int a[10000])
{
    int i;
    for(i=0;i<=10000;i++)
    {
        if(a[i]>9)
        {
            a[i+1]+=(a[i]-a[i]%10)/10;
            a[i]=a[i]%10;
            }
        }
        return a;
    }
int main()
{
    int A[10000],n,i,j,count;
    A[0]=1;
    scanf("%d",&n);
    for(i=1;i<10000;i++)
    A[i]=0;
    for(i=1;i<=n;i++)
    {
    for(j=0;j<10000;j++)
        A[j]=A[j]*i;
            a(A);
                }
                int c=0;
        for(i=9999;A[i]==0;i--);
        for(c=i;c>=0;c--)
        printf("%d",A[c]);
        return 0;
   }
这是我以前写的一个求大数阶乘的算法,你可以参考下

一片落叶掉进了回忆的流年。
2015-04-24 00:10
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。

一片落叶掉进了回忆的流年。
2015-04-24 00:11
青青绿豆
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2015-4-21
收藏
得分:0 
谢谢楼上诸葛先生!
昨晚想到这种方法,没调试好,我想可以解决了😊
2015-04-24 17:56
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:0 
#include<stdio.h>
int main()
{
    int a[10000]={1},n,i,j,kc,m;
    scanf("%d",&n);
    m=1;
    for(i=2;i<=n;i++)
    {
      kc=0;
      for(j=0;j<m;j++)
      {
          a[j]=a[j]*i+kc;
          kc=a[j]/10;
        a[j]=a[j]%10;
     }
     if(kc>0)
           {a[j]=a[j]+kc;
           m++;}
    }
    for(i=m-1;i>=0;i--)
      printf("%d",a[i]);
    printf("\n");
}
2015-05-04 02:17
快速回复:求解C语言动态数组方面问题
数据加载中...
 
   



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

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