大数问题

                       大数问题
大数是指计算的数值非常大或者对运算的精度要求非常高,用已知的数据类型无法精确表示的数值。
例如求Fibonacci数列的第1000个数。
例计算 到小数点后第2000位。
计算大数的一般方法是用数组模拟大数的运算,开一个比较大的整型(或双精度类型)数组,数组的元素代表大数的某一位,通过数组元素的运算模拟大数的运算,最后将代表大数的数组输出。
常用的大数算法有如下几种类型:
大数的加减;
大数的乘;
超大数的乘积;
任意高精度计算。

整数探究
输入:
输入最多100行,每行一个超长整数。
每个整数最多100位。
没有负数输入。
最后输入0结束。
输出:
输出所有输入超长整数的和。
输入样例:
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
输出样例:
370370367037037036703703703670
程序代码:
#include
#include
#include
#include
using namespace std;
void main()
{
    ifstream stream("input.txt");
    vectorv1,v2;
    int f=1,g=0;
 char str[100];
 memset(str,0,sizeof(str));
 stream>>str;
 while(!stream.eof())
 {
     if(str!="0")
  { 
           
         if(f==1)
   {
      for(int i=0;i<100;i++)
      {  
       if(str[i]!='/0')
       {   
        char c=str[i];
        int b=atoi(&c);
      
        v1.push_back(b);f=2;
       }
       else{ break; }
      }
      g++;
   }
   else
   {
       for(int i=0;i<100;i++)
    {
            if(str[i]!='/0')
      {  
       char c=str[i];
       int b=atoi(&c);
       v2.push_back(b);
      }
      else{ break; }
    }
       g++;
   }
            if(g==1)
   {
    memset(str,0,sizeof(str));
    stream>>str;continue;
   }
   else
   {
       int smallsize,bigsize;
          if(v1.size()>=v2.size())
    {
           smallsize=v2.size()-1;
           bigsize=v1.size()-1;
           int middle=0,i=bigsize;
           for(i;i>=0;i--)
     {
     // cout<                  int temp=middle;
      if(smallsize>=0)
      {
          middle=(v1[i]+v2[smallsize]+middle)/10;
                            v1[i]=(v1[i]+v2[smallsize]+temp)%10;
               // cout<          smallsize--;
      }
      else
      {
          middle=(v1[i]+middle)/10;
       if(middle==0){ v1[i]+=temp;break;}
       else{ v1[i]=(v1[i]+temp)%10; }
      }
           
     }
                    if(i<0&&middle==1){ v1.insert(v1.begin(),1); }
     f=2;
    /* for(int d=0;d     {  cout<                    cout<           v2.clear();
    }
          else
    { 
           smallsize=v1.size()-1;
           bigsize=v2.size()-1;
           int middle=0,i=bigsize;
           for(i;i>=0;i--)
     {
                  int temp=middle;
      //cout<      if(smallsize>=0)
      {
          middle=(v2[i]+v1[smallsize]+middle)/10;
                            v2[i]=(v2[i]+v1[smallsize]+temp)%10;
               // cout<          smallsize--;
      }
      else
      {
          middle=(v2[i]+middle)/10;
       if(middle==0){ v2[i]+=temp;break;}
       else{ v2[i]=(v2[i]+temp)%10; }
      }
         }
     if(i<0&&middle==1)
     {
                        v2.insert(v2.begin(),1);
     }
     f=1;
     
     /*for(int d=0;d     {  cout<     cout<                    v1.clear();
    }
   }
   memset(str,0,sizeof(str));
   stream>>str;
  }//if str
  else{ break;}
 }//while
    if(g==0){ cout<<"0"< else
 {
  if(f==1)
  {
         for(int j=0;j   {
         cout<   }
      cout<  }
    else
    {
        for(int j=0;j     {
         cout<     }
       cout<    }
 }//else g
}

你可能感兴趣的:(C++/C/ACM)