今日在做PAT乙-1091 N-自守數這道題時,需要將一個整數K的末尾的N位分離出來。
例如將整數25592 的最後兩位 92 分離出來。
常規的做法是對這個整數做求餘運算,既 K % (10^N)
但求N的長度以及算10^N寫起代碼來比較煩。
於是在看了網上其他大神的博客後,get到了運用substr函數分離末尾數字的方法,現總結如下。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n=3;//例如要分離最後三位
string str("123456789");
string res=str.substr(str.length()-n);
cout<<res; //789
}
/*
1. substr形式:s.substr(pos, n)
2. 解釋:返回一個string,包含s中從pos開始的n個字符的拷貝(pos的默認值是0,n的默認值是s.size() - pos,即不加參數會默認拷貝整個s)
上例中省略了n,pos的值爲str.length()-n=9-3=6,故從字符串第六位(下標從零開始,既‘7’)開始拷貝,n的默認值爲9-6=3。所以最終實現了從‘7’開始分離3個字符
那麼,當我們要求一個數字的末尾N位時候,就可以先將這個數字轉換成string,然後再用這個方法很方便求得啦。