当前位置: 首页 > news >正文

PAT甲级(Advanced Level) Practice 1023 Have Fun with Numbers

原题

1023 Have Fun with Numbers - PAT (Advanced Level) Practice

题目大意

输入一个不大于20位的数,判断该数乘2后所用的每个数字数量和原数是否一样。

解题思路

因为这个数最大可能达到20位,超出了long long的范围,因此我们考虑大数乘法,用vector数组倒序存储该数。用数组digit[]统计每个数字出现的次数,最后将乘2的结果中每个数字统计一遍即可。

代码(c++)
#include <bits/stdc++.h>
#include <vector>

using namespace std;

string s;
vector<int> num;
int digit[10] = {0};

vector<int> mul(vector<int> num, int k) {  // 大数乘小数
    vector<int> res;
    int count = 0;                         // count表示进位
    for(int i : num) {
        int x = i * k + count;
        count = x / 10;
        res.push_back(x % 10);
    }
    if(count) res.push_back(count);        // 若最后还有进位,补上
    return res;
}

bool check(vector<int> num2) {             // 统计每个数字出现次数是否相等
    for(int i : num2) digit[i]--;          // digit所有都为0时表示全部相等
    for(int i :digit) if(i) return false;
    return true;
}

int main() {
    cin >> s;
    for(int i = s.size() - 1; i >= 0; i--) {
        int t = s[i] - '0';
        digit[t]++;
        num.push_back(t);
    }
    vector<int> num2 = mul(num, 2);
    if(check(num2)) puts("Yes");
    else puts("No");
    for(int i = num2.size() - 1; i >= 0; i--) cout << num2[i];
}

相关文章:

  • LeetCode 1005. K 次取反后最大化的数组和 java题解
  • C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷二)
  • SpringBoot3+Druid+MybatisPlus多数据源支持,通过@DS注解配置Service/Mapper/Entity使用什么数据源
  • Windows11 新机开荒(二)电脑优化设置
  • C++ 类和对象 友元 内部类 this指针 默认成员函数 初始化列表……
  • Pandas DataFrame:数据分析的利器
  • 14 结构体
  • WebSocket和长轮询
  • 【操作系统】Ch6 文件系统
  • 【最后203篇系列】015 几种消息队列的思考
  • ORA-00600错误的深度剖析:如何避免与解决?
  • 蓝桥杯宝石,考察数学。考察公式推导能力
  • 设计模式(行为型)-命令模式
  • 【MySQL】MySQL数据存储机制之存储引擎
  • Vim 编辑器-实现基础跳转
  • MCP 开放协议
  • 55-交换机堆叠
  • P4924 [1007] 魔法少女小Scarlet
  • 模板初阶:
  • 判断一个数是否是质数(素数)
  • 外企聊营商|特雷通集团:税务服务“及时雨”
  • 黄仕忠丨戏曲文献研究之回顾与展望
  • 加拿大总理宣布新内阁名单
  • 周启鸣加盟同济大学,曾任香港浸会大学深圳研究院院长
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵
  • 吉林:消纳绿电,“氢”装上阵