int multiplication in C++ should be processed with caution.

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){

// Check the number of parameters
if (argc < 1) {
// Tell the user how to run the program
std::cerr << "Usage: " << argv[0] << " takes 1 parameter:  the value of int to be multiplied " << std::endl;
return 1;
}

int a = stoi(argv[1]);
long int b = stol(argv[1]);

cout.precision(10);
cout << "Multiple itself as int: " << a * a << endl;
cout << "Multiple itself as long int: " << b * b << endl;

}


Compile and run the program using -std=c++11.

cpp-int-multiply ‹master*›  ./int-multiplication.out 1000
Multiple itself as int: 1000000
Multiple itself as long int: 1000000

cpp-int-multiply ‹master*›  ./int-multiplication.out 10000
Multiple itself as int: 100000000
Multiple itself as long int: 100000000

cpp-int-multiply ‹master*›  ./int-multiplication.out 100000
Multiple itself as int: 1410065408
Multiple itself as long int: 10000000000

cpp-int-multiply ‹master*›  ./int-multiplication.out 1000000
Multiple itself as int: -727379968
Multiple itself as long int: 1000000000000


The results seems to be weird because the multiplicated number exceeds the max of int.

Within for loops, the int i = 0 should be used carefully. The calculation i*i is problematic even i is not exceeding the max. There are solutions to this. We could convert i to double (double)i in situ. Or we could simple use long int.

Source code at repl.it.

Results on asciinema.

Published: by ;