案例十:重复两遍的数

分析:

对输入的正整数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;
}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值