fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <sstream>
  4. #include <iomanip> // for setw, setfill
  5.  
  6. using namespace std;
  7.  
  8. int binary(int number);
  9.  
  10. int main()
  11. {
  12.  
  13. vector<vector<int> > matrix;
  14.  
  15. cout<<"Please enter the size of the identity matrix"<<endl;
  16. int n;
  17. cin>>n;
  18.  
  19. // Initialize the matrix
  20. matrix.resize(n);
  21. for (int i=0; i<n;i++)
  22. {
  23.  
  24. matrix[i].resize(n);
  25. }
  26.  
  27. // Initialize number of steps for the generation of the matrix
  28. int steps = 1<<n-1;
  29.  
  30.  
  31. int bin = binary(steps);
  32. ostringstream binString;
  33.  
  34. binString <<bin;
  35. cout << "Pre-pad: " << binString.str() << "\n";
  36. // Pad the string
  37. if(binString.str().size()<n)
  38. {
  39. std::string dest = binString.str();
  40. int nPaddings = n-binString.str().size();
  41. if (nPaddings==0) nPaddings=1;
  42. dest = std::string( nPaddings, '0').append( binString.str());
  43. binString.str("");
  44. binString<<dest;
  45. }
  46. cout << "Post-pad: " << binString.str() << "\n";
  47. for (int col = 0; col<n; col++)
  48. {
  49. if(col>=1)
  50. {
  51. steps= (int)steps/2;
  52. int bin = binary(steps);
  53. binString.str("");
  54. binString << bin;
  55. cout << "Pre-pad("<<col<<"): " << binString.str() << "\n";
  56. if(binString.str().size()<n)
  57. {
  58. std::string dest = binString.str();
  59. int nPaddings = n-steps;
  60. if (nPaddings==0) nPaddings=1;
  61. cout << "padding with " << nPaddings << " 0s ("<<col<<")\n";
  62. dest = std::string( nPaddings, '0').append( binString.str());
  63. binString.str("");
  64. binString<<dest;
  65. }
  66. cout << "Post-pad("<<col<<"): " << binString.str() << "\n";
  67. }
  68. for (int row=0; row<n; row++)
  69. {
  70. matrix[col][row] =binString.str().at(row)-'0';
  71. }
  72. }
  73.  
  74.  
  75. // Print the matrix and return
  76. for(unsigned int y = 0; y < n; y++)
  77. {
  78. for(unsigned int x = 0; x < n; x++)
  79. cout << "\t" << matrix[y][x];
  80. cout << "\n";
  81. }
  82. return 0;
  83. }
  84.  
  85. int binary(int number) {
  86. long rem,i=1,sum=0;
  87. do
  88. {
  89. rem=number%2;
  90. sum=sum + (i*rem);
  91. number=number/2;
  92. i=i*10;
  93. }while(number>0);
  94.  
  95. return sum;
  96. }
Runtime error #stdin #stdout 0.01s 2828KB
stdin
5
stdout
Please enter the size of the identity matrix
Pre-pad: 10000
Post-pad: 10000
Pre-pad(1): 1000
padding with -3 0s (1)