| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1638 人关注过本帖, 1 人收藏
标题:超大数求解,怎么做啊,头都想大了
只看楼主 加入收藏
忘了
Rank: 2
等 级:论坛游民
帖 子:16
专家分:55
注 册:2010-5-17
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:17 
超大数求解,怎么做啊,头都想大了
怎么输出1000!
685*9=
个位相乘取个位,进十位,  下一位相乘进位与个位相加,是否进位,进位与十位相加,相进,依此例推.     
ABC*D=C*D%10
            (C*D/10+B*D%10)>9?-10
                                  B*D/10+A*D%10+1??>9?
                                                       A*D/10
                                             
        5         4+2=6            7+4=1→1        5+1=6
  
    5616   6165
    0123   3210

[ 本帖最后由 忘了 于 2010-6-11 21:05 编辑 ]
搜索更多相关主题的帖子: 求解 
2010-06-09 20:58
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
看不懂~~~
2010-06-11 15:00
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
不懂看了~~

努力—前进—变老—退休—入土
2010-06-11 16:34
myhnuhai
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:3
帖 子:425
专家分:1725
注 册:2010-3-17
收藏
得分:0 
貌似lz没解释清楚啊 !

不要让肮脏的记忆,迷失了原本纯洁的心灵!
2010-06-11 18:01
DMS
Rank: 2
等 级:论坛游民
帖 子:54
专家分:48
注 册:2009-6-28
收藏
得分:0 
LZ再解释下
2010-06-11 18:08
忘了
Rank: 2
等 级:论坛游民
帖 子:16
专家分:55
注 册:2010-5-17
收藏
得分:0 
比如输出1000!,怎么办!
2010-06-11 21:04
kingmacrobo
Rank: 2
来 自:HUST
等 级:论坛游民
帖 子:39
专家分:49
注 册:2010-6-1
收藏
得分:0 
我这有一个方法,就是有点慢,算1000!要30秒左右。代码如下:
程序代码:
#include<stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{ 
    SYSTEMTIME STime1;
    SYSTEMTIME STime2;
    ::GetLocalTime(&STime1);
    int PLace[50000]={0};
    int ex[50000]={0};
    int P[50000]={0};
    unsigned long n,k,i,N,j=1,l;
    int flag=1,temp;
    printf("Please input a number:\n");
    scanf("%u",&n);
    N=n;
    for (;n/10;)
    {
    PLace[j]=n%10;
    n=n/10;
    j++;
    }
  
    PLace[j]=n;
    l=j;
    for (j=1;j<=l;j++)
    {
    P[j]=PLace[j];
    }
    for (k=N;k>=3;k--)
    {
    for (i=1;i<k-1;i++)
    {
      
        for(j=1;;j++)
        {
              temp=PLace[j];
              PLace[j]=(temp+P[j]+ex[j-1])%10;
              ex[j]=(temp+P[j]+ex[j-1])/10;
              if (j==l&&ex[l]==0)
              {
              break;
              }
              else if (j==l&&ex[l]>0)
              {
              l++;
              }
        }
        j=1;
                
    }
  
    for (j=1;j<=l;j++)
    {
      
        P[j]=PLace[j];
  
    }
    }
    for (j=l;j>=1;j--)
    {
    printf("%d",PLace[j]);
    }
    printf("\n");
    ::GetLocalTime(&STime2);
    printf("Use Time : %uhours %uminutes %useconds %umilliseconds\n",STime2.wHour-STime1.wHour,STime2.wMinute-STime1.wMinute,STime2.wSecond-STime1.wSecond,STime2.wMilliseconds-STime1.wMilliseconds);
    getchar();
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-06-11 21:38
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
30s~~~
2010-06-11 23:00
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
用32进制的数进行逻辑运算  速度倒是很快 就是逻辑上有点难  加了注释都看不懂
2010-06-13 17:52
skyuser213
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:37
专家分:117
注 册:2010-5-9
收藏
得分:20 
程序代码:
int main(int argc, char* argv[])
{
  int nArray[100000];
  int nNumber;
  int nTemp;
  int nCarry = 0;  //进位
  int nDigital = 1; //位数
  clock_t cStart;
  clock_t cEnd;
  double  dDuration;

    printf("输入阶乘上限:");
  scanf("%d", &nNumber);

 
  nArray[0] = 1;
  //从2开始阶乘
  cStart = clock();
  for (int i = 2; i <= nNumber; i++)
  {
    for (int j = 0, nCarry = 0; j < nDigital; j++)
    {
      nTemp = nArray[j] * i + nCarry; //每一位乘以i 加上进位
      nArray[j] = nTemp % 10; //只留一位
      nCarry = nTemp / 10; //剩下的进位
    }
    while (nCarry > 0)  //判断是否有进位
    {
      ++nDigital; //有进位位数加一位
      nArray[nDigital - 1] = nCarry % 10; //把除以10的余数值给 上一位
      nCarry = nCarry / 10; //十位以上给进位
    }
  }
  cEnd = clock();

  //以为从数组下标0开始进位,所以从大到小倒着输出
  for (int k = nDigital - 1; k >= 0; k--)
  {
    printf("%d",nArray[k]);
  }
  printf("\r\n");
  dDuration = (double)(cEnd - cStart) / CLOCKS_PER_SEC;
  printf("计算用时: %f秒\r\n", dDuration);
    return 0;
}

1000! 0.06秒
栈里放的数组,所以估计到几万的阶乘就会有问题
放堆里理论上无限大.
2010-06-13 18:02
快速回复:超大数求解,怎么做啊,头都想大了
数据加载中...
 
   



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

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