回文数的个数、杨辉三角
全部翻轉
部分翻轉
可以將整數的最后一半數字進行整數反轉,然后將反轉的部分與數字的前部分進行比較,判斷是否是回文數。也可以將整個整數進行反轉然后進行比較,但是會發生溢出情況,所以可以選擇只反轉數字的后半部分,若與前半部分相同則為回文數。
若該整數是一個負數那么肯定不是回文數,或者該整數的最后一位為0而第一位不為0也不可能是回文數,所以可以直接將這兩種情況判斷返回false。
此時剩下的普通情況的話,此處分為兩種情況,若假設該數字是一個回文數,若是回文數的話,長度又分為奇數和偶數。
若該整數長度為奇數的話那么反轉一半的標志就是反轉的數字與目前剩下的前面的那部分數字相同了,此時應停止反轉;
若該回文整數長度為偶數的話,我們將中間的那個元素歸在反轉數字中(例如:12321 我們將從1一直反轉到3才停止)此時反轉后的數字123大于目前剩下的12的時候停止反轉。
若假設該數字不是一個回文數字,其中若整數長度無論是偶數還是奇數,進行反轉的時候,反轉的數字和目前前半部分剩下的數字永遠不可能相等的,所以停止反轉的標志就是當反轉的數字大于目前前半部的數字的時候,停止反轉。停止反轉后,我們只需要將反轉的結果和目前剩下的前半部分進行對比就行。
在此處,若該數字是回文數的話,長度并且為奇數的時候(之前回文數長度為奇數的時候,我們反轉的時候是將中間的那個數字算了進去),所以在最后進行對比的時候,要將反轉的數字/10,再與前半部分的數字進行對比才可以,若該回文數長度是偶數的話,只需要將反轉數和前半部數字直接對比就可以。而若該數字不是回文數的話,無論是奇數還是偶數長度,它都是不可能滿足以上兩種可能的,所以若都不滿足以上的兩種情況的話就說明該數字不是回文數。
bool is_palindrome(int x) {int sum=0;if(x<0 || (x/10!=0 && x%10==0)){return false;}else{while(x>sum) //注意是大于號,等于的時候就退出了,可以在下面判斷該整數是否為偶數{sum = sum * 10 + x%10;x = x/10;}}/*若整數為偶數*/if(sum == x){return true;}/*若整數位數為奇數*/if(sum/10 == x){return true;}return false;}O(log10(n))。
#include <bits/stdc++.h>using namespace std;int main() {int n;cin >> n;constexpr int MAXN = 25;int data[MAXN][MAXN] = {0};data[0][0] = 1;data[1][0] = 1;data[1][1] = 1;for (int i = 2; i < MAXN; ++i) {/* 每行的第一個元素都是1 */data[i][0] = 1;/* 中間元素的值 等于左上方的元素的值 加上正上方的元素的值 */for (int j = 1; j < i; ++j) {data[i][j] = data[i - 1][j - 1] + data[i - 1][j];}/* 每行的最后一個元素都是1 */data[i][i] = 1;}//輸出結果for (int i = 0; i < n; ++i) {for (int j = 0; j <= i; ++j) {cout << data[i][j];if (j < i) cout << " ";}cout << endl;}return 0; }總結
以上是生活随笔為你收集整理的回文数的个数、杨辉三角的全部內容,希望文章能夠幫你解決所遇到的問題。