桁の扱いメモ

n桁目の取得などのメモ

数値 → 文字列に変換して扱う

string s = to_string(num);

桁数の取得

string s = "1234";
int n = s.length();
cout<< n; // 4

n桁目を取得

charの演算を利用(asciiで0からの差分 + int変換に変換)

string s = "1234";
int n = s[0] - '0';
cout<< n; // 1

n桁目とm桁目をスワップ

swap関数を使ってスワップ。元の値をスワップ

string s = "1234";
swap(s[0], s[3]); 
int n = stoi(s); //必要であればintに変換
cout<< n; // 4231

数値のまま扱う

桁数の取得

基数で割っていく。商が0になるまで割る回数が桁数。

int x = 1234;

int numDigit;
while (x > 0)
  {
    x = x / 10;
    numDigit++;
  }
cout << numDigit; //4

n桁目を取得

digit_n = (x / 10n-1) % 10

右シフトして基数で割った余り

int x = 987654321;
int n = 9;

int shift = x / pow(10, n-1);
int digit = shift % 10;
cout << digit; //9

n桁目とm桁目をスワップ

引いて足す

int x = 1234;
int n = 1;
int m = 4;

//桁数
int numDigit = 4;
//n桁目
int a = 4;
//m桁目
int b = 1;

int y = x - b * pow(10, m-1) - a * pow(10, n-1) + a * pow(10, m-1) + b * pow(10, n-1);   
cout << y; //4231