Click here to Skip to main content
15,881,248 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a large number that is initialized by a multidimensional string array and I need to do arithmetic operations on the elements of the array. I implemented the arithmetic operations with vectors but before that, I need to convert the multidimensional string array to a multidimensional vector.

C++
<pre>
//Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.
//The number is in the main()

#include <iostream>
#include <string>
#include <vector>



std::vector<int>addition(std::vector<int>&left, std::vector<int>&right)
{
    int carry=0;
    if(left.size()==right.size())
    {
        for(int i=left.size()-1; i>=0; i--)
        {
            if(i==0)
            {
                left[i]=left[i]+right[i]+carry;
                break;
            }
            left[i]=(left[i]+right[i]+carry);
            carry=left[i]/10;
            left[i]=left[i]%10;

        }

    }
    if(left.size()>right.size())
    {
        int right_size=right.size()-1;
        for(int i=left.size()-1; i>=left.size()-right.size(); i--)
        {
            left[i]=left[i]+right[right_size]+carry;
            carry=left[i]/10;
            left[i]=left[i]%10;
            right_size--;
        }

        for(int i=right.size()-1; i>=0; i--)
        {
            left[i]=left[i]+carry;
        }
    }

    if(right.size()>left.size())
    {
        int left_size=left.size()-1;
        for(int i=right.size()-1; i>=right.size()-left.size(); i--)
        {
            right[i]=right[i]+left[left_size]+carry;
            carry=right[i]/10;
            right[i]=right[i]%10;
            left_size--;
        }
        for(int i=left.size()-1; i>=0; i--)
        {
            right[i]=right[i]+carry;
        }
    }


}

///NEXT STEPS
//1)conversion of numbers matrix to int matrix is needed
std::vector<std::vector<int>>numbers(std::vector<std::vector<std::string>>str_numbers)
{
    std::vector<std::string>left;

    int left_row=0;
    for(int col=0; col<50; col++)
    {
        std::string num=str_numbers[left_row][col];
        left[col]=num-'0';
    }

    for(int row=0; row<100; row++)
    {
        for(int col=0; col<50; col++)
        {

        }
    }
}


int main()
{
    std::vector<int>left{1,4,5,7,2,1,5};
    std::vector<int>right{2,2,1,4};

    //75778645
    std::string number[100]= {
            {"37107287533902102798797998220837590246510135740250"},
            {"46376937677490009712648124896970078050417018260538"},
            {"74324986199524741059474233309513058123726617309629"},
            {"91942213363574161572522430563301811072406154908250"},
            {"23067588207539346171171980310421047513778063246676"},
            {"89261670696623633820136378418383684178734361726757"},
            {"28112879812849979408065481931592621691275889832738"},
            {"44274228917432520321923589422876796487670272189318"},
            {"47451445736001306439091167216856844588711603153276"},
            {"70386486105843025439939619828917593665686757934951"},
            {"62176457141856560629502157223196586755079324193331"},
            {"64906352462741904929101432445813822663347944758178"},
            {"92575867718337217661963751590579239728245598838407"},
            {"58203565325359399008402633568948830189458628227828"},
            {"80181199384826282014278194139940567587151170094390"},
            {"35398664372827112653829987240784473053190104293586"},
            {"86515506006295864861532075273371959191420517255829"},
            {"71693888707715466499115593487603532921714970056938"},
            {"54370070576826684624621495650076471787294438377604"},
            {"53282654108756828443191190634694037855217779295145"},
            {"36123272525000296071075082563815656710885258350721"},
            {"45876576172410976447339110607218265236877223636045"},
            {"17423706905851860660448207621209813287860733969412"},
            {"81142660418086830619328460811191061556940512689692"},
            {"51934325451728388641918047049293215058642563049483"},
            {"62467221648435076201727918039944693004732956340691"},
            {"15732444386908125794514089057706229429197107928209"},
            {"55037687525678773091862540744969844508330393682126"},
            {"18336384825330154686196124348767681297534375946515"},
            {"80386287592878490201521685554828717201219257766954"},
            {"78182833757993103614740356856449095527097864797581"},
            {"16726320100436897842553539920931837441497806860984"},
            {"48403098129077791799088218795327364475675590848030"},
            {"87086987551392711854517078544161852424320693150332"},
            {"59959406895756536782107074926966537676326235447210"},
            {"69793950679652694742597709739166693763042633987085"},
            {"41052684708299085211399427365734116182760315001271"},
            {"65378607361501080857009149939512557028198746004375"},
            {"35829035317434717326932123578154982629742552737307"},
            {"94953759765105305946966067683156574377167401875275"},
            {"88902802571733229619176668713819931811048770190271"},
            {"25267680276078003013678680992525463401061632866526"},
            {"36270218540497705585629946580636237993140746255962"},
            {"24074486908231174977792365466257246923322810917141"},
            {"91430288197103288597806669760892938638285025333403"},
            {"34413065578016127815921815005561868836468420090470"},
            {"23053081172816430487623791969842487255036638784583"},
            {"11487696932154902810424020138335124462181441773470"},
            {"63783299490636259666498587618221225225512486764533"},
            {"67720186971698544312419572409913959008952310058822"},
            {"95548255300263520781532296796249481641953868218774"},
            {"76085327132285723110424803456124867697064507995236"},
            {"37774242535411291684276865538926205024910326572967"},
            {"23701913275725675285653248258265463092207058596522"},
            {"29798860272258331913126375147341994889534765745501"},
            {"18495701454879288984856827726077713721403798879715"},
            {"38298203783031473527721580348144513491373226651381"},
            {"34829543829199918180278916522431027392251122869539"},
            {"40957953066405232632538044100059654939159879593635"},
            {"29746152185502371307642255121183693803580388584903"},
            {"41698116222072977186158236678424689157993532961922"},
            {"62467957194401269043877107275048102390895523597457"},
            {"23189706772547915061505504953922979530901129967519"},
            {"86188088225875314529584099251203829009407770775672"},
            {"11306739708304724483816533873502340845647058077308"},
            {"82959174767140363198008187129011875491310547126581"},
            {"97623331044818386269515456334926366572897563400500"},
            {"42846280183517070527831839425882145521227251250327"},
            {"55121603546981200581762165212827652751691296897789"},
            {"32238195734329339946437501907836945765883352399886"},
            {"75506164965184775180738168837861091527357929701337"},
            {"62177842752192623401942399639168044983993173312731"},
            {"32924185707147349566916674687634660915035914677504"},
            {"99518671430235219628894890102423325116913619626622"},
            {"73267460800591547471830798392868535206946944540724"},
            {"76841822524674417161514036427982273348055556214818"},
            {"97142617910342598647204516893989422179826088076852"},
            {"87783646182799346313767754307809363333018982642090"},
            {"10848802521674670883215120185883543223812876952786"},
            {"71329612474782464538636993009049310363619763878039"},
            {"62184073572399794223406235393808339651327408011116"},
            {"66627891981488087797941876876144230030984490851411"},
            {"60661826293682836764744779239180335110989069790714"},
            {"85786944089552990653640447425576083659976645795096"},
            {"66024396409905389607120198219976047599490197230297"},
            {"64913982680032973156037120041377903785566085089252"},
            {"16730939319872750275468906903707539413042652315011"},
            {"94809377245048795150954100921645863754710598436791"},
            {"78639167021187492431995700641917969777599028300699"},
            {"15368713711936614952811305876380278410754449733078"},
            {"40789923115535562561142322423255033685442488917353"},
            {"44889911501440648020369068063960672322193204149535"},
            {"41503128880339536053299340368006977710650566631954"},
            {"81234880673210146739058568557934581403627822703280"},
            {"82616570773948327592232845941706525094512325230608"},
            {"22918802058777319719839450180888072429661980811197"},
            {"77158542502016545090413245809786882778948721859617"},
            {"72107838435069186155435662884062257473692284509516"},
            {"20849603980134001723930671666823555245252804609722"},
            {"53503534226472524250874054075591789781264330331690"}

    };

    addition(left, right);

}


What I have tried:

I have tried to do it like this: num_array[row][col]=string_vec[row][col]-'0';
it gives a compiler error
Posted
Updated 29-Aug-18 4:16am
v2
Comments
[no name] 29-Aug-18 0:47am    
This is not a very clear question. Converting a string to an int is easy to find using Google. Converting Strings to Numbers in C/C++ - GeeksforGeeks[^] Show the code you are using.
Manish K. Agarwal 29-Aug-18 3:59am    
pls provide some sample input and expected output

You may use the istringstream[^] class to perform the string to number conversion. E.g.
C++
#include <iostream>
#include <sstream>
#include <vector>

using namespace std;

int main()
{
  // the bidimensional vector of strings (string representation of integers)
  vector < vector < string > > sv { { "10", "11", "12", "13" }, { "-1", "+1", "0", "2" }};

  vector < vector < int > > iv; // the bidimensional vector of integers we have to fill

  // fill the vector of integers
  for ( const auto & row : sv)
  {
    iv.push_back( vector <int>() );
    for ( const auto & v : row )
    { // convert string to integer using an instance of the 'istringstream class'
      istringstream iss(v);
      int i; 
      iss >> i;
      iv.back().push_back(i);
    }
  }

  // perform a simple operation on numeric values, let's double all the integers
  for (auto & row : iv)
    for (auto & x : row) x *= 2;


  // report new values
  for (const auto & row : iv)
  {
    for (const auto & x : row)
      cout << x << " ";
    cout << endl;
  }
}
 
Share this answer
 
Comments
Member 13277493 29-Aug-18 10:17am    
thanks!
CPallini 29-Aug-18 10:29am    
You are welcome.
If you have stored numbers as strings in the array you must convert the in the correct manner. Use the function stod from the string class.

What you have done is a hack to convert a single char to a single number, which is working only for numbers from 0 to 9. So it is better to really understand what some code is doing, and not understanding code is very dangerous. :-O
 
Share this answer
 
Comments
Member 13277493 29-Aug-18 10:18am    
I needed only the numbers from 0 to 9, yes I think that I did not understand that code good enough

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900