Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

 Сбор на големи числа
Автор  jan (20.01.2005 11:49) съобщение до автора
Погледнат  1273 пъти добави към любими
Оценка добави коментар
Гласове  31 изпрати на приятел
Коментари  (6) абонирай се за C-Cplusplus
     
jan
     
 

//Сбор на две големи числя.
//Отново няма проверка за коректност на данните.
//Причината е в това, че смятам да направя клас за смятане
//с големи числа и там смятам да реша глобално обработката
//на грешките за всички методи.
//Компилирано е с g++.

#include <iostream>
#include <stdlib.h>
#include <vector>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    //събираеми
    vector<char> a,b;
    string aa,bb;
    cout<<"Input first number z1=";
    cin>>aa;
    for(int i=0;i<aa.size();i++)
    {
        a.push_back(aa[i]-48);
    }    

    cout<<"Input second number z2=";
    cin>>bb;
    for(int i=0;i<bb.size();i++)
    {
        b.push_back(bb[i]-48);
    }

    const int n=aa.size(),m=bb.size();
   
    const int max=(n>=m?n:m);

    vector<int> rez(max+1,0);
    //Начало на алгоритъма
    int temp=0;
    int j=n-1;
    int p=m-1;
        for(int i=max;i>=0;i--)
        {
            if(j>=0&&p>=0)
                rez[i]=temp+a[j]+b[p];
            if(j>=0&&p<0)   
                rez[i]=temp+a[j];
            if(j<0&&p>=0)   
                rez[i]=temp+b[p];
            if(j<0&&p<0)   
                rez[i]=temp;
            temp=0;
            temp=rez[i]/10;
            rez[i]%=10;
            j--;
            p--;
        }   
    //Край на алгоритъма

    for(int i=0;i<=max;i++)
        cout<<rez[i];
    cout<<endl;
 
    system("PAUSE");   
    return 0;
}



Ключови думи: c C++ c# големи числа сбор смятане




 1 посетител чете този скрипт (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Nescafe , posle go kopira6 tam , vuv nov dokument i go puska6 sus run ,
kato si na4inae6t ti preporu4vam borladn C 5.03 , izglejda po-nevzra4no no ako si na4inae6t 6te ti e dale4 po-lesno da razbere6 za kakvo stava duma

  irrefutable на 14.03.2005 21:47

понеже тепърва навлизам в C++ как да въведа тоя код ? Давам NEW->W32 Conosle Aplication->Empty и после ?

Много мерси

  Nescafe на 26.02.2005 10:37

Jan i bratle ne me ignorvai v IRC i posle da izpolzva6 programata mi malko promenena na razni mesta kato tezi

  irrefutable на 16.02.2005 19:10

#include "iostream.h"
void main() {char a[50],b[50],c[51]; cin>>a>>b;  int l;
for (int i=0;i<31;i++)c[i]='0';
int aa= strlen(a);int bb=strlen(b) ;
if (aa>bb){l=aa;
for (int i=bb;i<=l;i++) b[i]='0';}
else{l=bb ;
for (int i=aa;i<=l;i++) a[i]='0'; };
int i=l;
while (i>0)
{
c[i+1]=a[aa]+b[bb]-'0'-'0'+c[i+1];
aa--;bb--;i--
if ( c[i+1]>'9') { c[i+1]=c[i+1]-('k'-'a'); c[i]='1'; }}
if (c[0]!='0') cout<<c[0];
for(int i=1;i<l+1;i++) cout<<c[i];cin>>a;}

  irrefutable на 16.02.2005 19:08

Определено е много по-компактно:-)

  jan на 20.01.2005 21:12

Добра програма :)

Ето и един вариант за облекчаване на проверките в цикъла :
    for(int i=max; i>=0; i--, j--, p--)
    {       
        rez[i] = temp;       
        if (j >= 0)
            rez[i] += a[j];       
        if (p >= 0)
            rez[i] += b[p];       
        temp = rez[i] / 10;
        rez[i] %= 10;
       
    }

Поздрави,
Изида

  Izida на 20.01.2005 17:23

 

 
  • Интересно от Софтуер
 
  • Интересно от myLINKS
 
 
 
 



IT-PLACE.NET © 2004 - 2008