| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 638 人关注过本帖
标题:1+...N!的问题(为什么只能加到95!)
只看楼主 加入收藏
jsmingzi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-3-28
收藏
 问题点数:0 回复次数:3 
1+...N!的问题(为什么只能加到95!)
#include"iostream.h"
void main()
{   int a[2][200];
    int n,p=1;
    cout<<"input n:";
    cin>>n;
    for(int i=1;i<=n;i++)
     {  int digit=1,digit2,temp,j,carry=0,m;
        a[1][1]=1;
        
        for(j=1;j<=i;j++)              //计算i的阶乘开始
          {  for(int k=1;k<=digit;k++)
               {temp=a[1][k]*j+carry;
                a[1][k]=temp%10;
                carry=temp/10;
               }
             while(carry)
               {a[1][++digit]=carry%10;
                carry/=10;
               }
              
           }                         //计算i的阶乘结束
            /*     cout<<i<<"!=";
              for(int t=digit;t>=1;t--)
                 cout<<a[i][t];        //验证i的阶乘
              cout<<endl;      */
            
        if(i==1){for(int q=1;q<=digit;q++)  //加和开始
                  a[0][q]=a[1][q];
                digit2=digit;
               
                }
      
            else{  
                   for(p=1,carry=0;p<=digit||p<=digit2;p++)
                     {if(p>digit)a[1][p]=0;
                      if(p>digit2)a[0][p]=0;
                      temp=a[0][p]+a[1][p]+carry;
                      a[0][p]=temp%10;
                  
                      carry=temp/10;
                  
                      }
               
                  while(carry){a[0][p]=1;
                             p++;}
                  digit2=--p;
                  
                  
                }               //加和结束
            cout<<"1!+...+"<<i<<"!=";
            for(int w=p;w>=1;w--)
               cout<<a[0][w];
            cout<<endl;         //验证每一步的阶乘和
         
     }
   //cout<<"p="<<p<<endl;       //输出结果的位数
   cout<<"sum=";
   for(;p>=1;p--)
     cout<<a[0][p];
   cout<<endl;
}

上面的程序是我利用数组编的加和程序,但是不知怎么搞的只能加到95!,加到了96!就会没反映了?请大家帮忙看一下.
搜索更多相关主题的帖子: carry int temp digit 
2008-04-06 13:21
bjtusq
Rank: 2
来 自:BJTU
等 级:论坛游民
帖 子:141
专家分:20
注 册:2006-8-5
收藏
得分:0 
算法不对吧

[url][/url]
2008-04-06 13:34
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
回复 1# 的帖子
注意数据类型int能够表示数的范围,否则会损失精度!
2008-04-06 13:59
jsmingzi
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-3-28
收藏
得分:0 
我是用的数组,每个数组元素只装一个一位数,因此很难出错,感觉漏洞可能出在那个统计位数的p以及中间的digit和digit,但是当我输出p时,到95!时p才达到149位,
到94!好像是147位,由此推算到96!应该是151位左右吧,    并且我曾经把int改为
unsigned lomg型,依然和int时一样只能加和到95!,加到96!时仍然算不出来,好像
数据太大,进入死循环一样,哪位高手可以帮一下?(上面的程序可以直接编译运行,只是只能加到149位数,也就是加到95!)
2008-04-06 21:29
快速回复:1+...N!的问题(为什么只能加到95!)
数据加载中...
 
   



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

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