(注意不能溢出)
#include<iostream> using namespace std; int reverse(int number) { int low, p, high = 0; int x = 1; while (number != 0) { low = number % 10; high = high * 10 + low; number = number / 10; if (high > INT_MAX / 10 || (low > 7 && high == INT_MAX / 10)) { return 0; cout << "error\n"; } if (high < -INT_MAX / 10 || (low < -8 && high == INT_MAX / 10)) return 0; } return high; } int main() { int number; cin >> number; int fan = reverse(number); cout << fan; } ## 罗马数字转化为整数 ```cpp ```cpp ```cpp class Solution { public: int romanToInt(string s) { unordered_map<char, int> m = { {‘I’,1}, {‘V’,5}, {‘X’,10},{‘L’,50},{‘C’,100}, {‘D’,500},{‘M’,1000} }; int sum = 0; for (int i = 0; i < s.size(); ++i) m[s[i]] < m[s[i + 1]] ? sum -= m[s[i]] : sum += m[s[i]]; return sum;}
}所在的位置,如果不存在这个数字,返回这个数字插入的位置序号
sort(nums.begin(),nums.end()); int n = nums.size(); int left = 0, right = n - 1,ans = n; while(left <= right) { int mid = ((right - left)>> 1 )+ left; if (target <= nums[mid]) { ans = mid; right = mid - 1; } else left = mid + 1; } return ans; int main() { vector<int>nums; int n; cin >> n; int a; for (int i = 0; i < n; i++) { cin >> a; nums.push_back(a); } int number; cin >> number; int m =search(nums, number); cout << m<<endl; }判断小于n的非负数中的质数 1和0不是质数 2是质数
int countPrimes(int n) { if(n < 3) return 0;; //从3开始验算,所以初始值为1(2为质数)。 int count = 1; for (int i = 3; i < n; i++){ //当某个数为 2 的 n 次方时(n为自然数),其 & (n - 1) 所得值将等价于取余运算所得值 //*如果 x = 2^n ,则 x & (n - 1) == x % n //if(i % 2 == 0) if ((i & 1) == 0) continue; ; bool sign = true; //用 j * j <= i 代替 j <= √i 会更好。 //因为我们已经排除了所有偶数,所以每次循环加二将规避偶数会减少循环次数 for (int j = 3; j * j <=i; j+=2){ if (i % j == 0){ sign = false; break; } } if (sign) count++; ; } return count; }