分析:
对输入的正整数n,求它的位数,设为len。如果Ien为奇数,直接输出no。如果Ien为偶数,则构造
一个数m=1000…0,有len/2个零,则n的前半段和后半段分别是n/m和n%m,判断这两部分是否相等即可
由于n值后面还要用到,所以先将n的值赋值给t。求t的位数,方法跟求t的各位数字之和是一样的:反复将t除以10再更新t,每次执行后的位数少一位;重复这一过程直到t的值变为0;在这个过程中统计位数即可
代码如下:
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
ll t,n; cin >> n;
int len=0;
t=n;
while(t){ //求n的位数
len++; t/=10;
}
if(len%2){ //位数为奇数
cout << "no" << endl; return 0;
}
ll m = 1;
for(int i = 1;i<=len/2;i++) //构造m,m为100…0(len/2个0)
m*=10; //用m可以取出n的前半段和后半段
ll p1 = n/m, p2 = n%m; //n的前半段,后半段
if(p1==p2) cout << "yes" << endl; //重复了2遍的数
else cout << "no" << endl;
return 0;
}