2的90次方精确值编程实现

刚刚笔试下来,这题没有弄明白(可能大家觉得都很简单吧),所以下来想了想,

和实验室讨论了下,方法当时也想到的。即,89个1的处理。

1=1

11=21+1

111=2(21+1)+1

1111=2(22+21+1)+1

... ...

89个1的十进制我们用10个数组存储。当低位数组表示的数超过了我们设定的值,高位进1即可。代码如下:

#include <iostream>
void main()
{


 int a[10]={0};
 for(int i=1;i<=90;++i)
 {
  for(int j=9;j>=0;--j)
  {
   a[j]*=2;
  }
  for(int j=9;j>=0;--j)
  {
   if(a[j]>10000)     //
   {
    a[j-1]+=1;
    a[j]-=10000;
   }
  }
  a[9]+=1;
 }
 for(int i=0;i<=9;++i)
 {
  if(a[i]!=0)
   std::cout<<a[i];
 }
 
 system("Pause");
}

更大的数的求法也大同小异了

 

posted @ 2013-10-11 21:26  时刻食客石刻#  阅读(570)  评论(0编辑  收藏  举报