1023. Have Fun with Numbers (20)

题目链接:https://www.patest.cn/contests/pat-a-practise/1023


题目大意:判断a和2*a中每一个数字的个数是否相同。


解题思路:

  • 为便于统计数字的个数使用字符串保存数字a,然后计算2*a
  • 再统计两者中0,1,···9的个数
  • 比较两者中每个数字的个数是否相同

代码如下:

#include <iostream>
#include <string>
using namespace std;
int cntnum1[10]={0};
int cntnum2[10]={0};
int main(int argc, char const *argv[])
{
    string a,b;
    cin>>a;
    b=a;//b用来保存a*2
    int tmp=0;
    for(int i=a.length()-1;i>=0;i--){//该循环用来计算a*2
        cntnum1[a[i]-'0']++;
        b[i]=((a[i]-'0')*2+tmp)%10+'0';
        if(((a[i]-'0')*2+tmp)<10)
            tmp=0;
        else
            tmp=1;

    }
    if(tmp==1)
        b='1'+b;
    for(int i=0;i<b.length();i++)
        cntnum2[b[i]-'0']++;
    for(int i=0;i<10;i++){
        if(cntnum1[i]!=cntnum2[i]){//判断2*a中每个数字的个数与a的是否相同
            cout<<"No"<<endl<<b<<endl;
            return 0;
        }
    }
    cout<<"Yes"<<endl<<b<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值