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