PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642

题目描述:

Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in a different permutation. Check to see the result if we double it again!

Now you are suppose to check if there are more numbers with this property. That is, double a given number with k digits, you are to tell if the resulting number consists of only a permutation of the digits in the original number.

译: 注意到数字 123456789 是一个恰好由数字 1 到 9 组成的没有重复数字的 9 位数。将它翻倍我们将会得到 246913578 , 刚好也是一个由数字 1 到 9 组成的没有重复数字的 9 位数的一个不同排列。如果我们再翻一倍看看结果如何!

现在你要检查是否更多的数字具有这个性质。给定一个 k 位数,将其翻倍,你应该告诉这个结果的数字是否是由原先数字的不同的排列组成。


Input Specification (输入说明):

Each input contains one test case. Each case contains one positive integer with no more than 20 digits.

译:每个输入文件包含一个测试用例,每个用例包含一个不超过 20 位的正整数。


Output Specification (输出说明):

For each test case, first print in a line "Yes" if doubling the input number gives a number that consists of only a permutation of the digits in the original number, or "No" if not. Then in the next line, print the doubled number.

译:对于每个测试用例,如果将输入的数字翻倍后的结果是由原先数字的一个不同排列,在第一行中输出 Yes ,否则输出 No 。在接下来的一行中,输出翻倍后的数字。


Sample Input (样例输入):

1234567899

Sample Output (样例输出):

Yes
2469135798

The Idea:

设计到大整数(超过 long long 范围)的运算,虽然只是一个简单的翻倍,所以需要用数组来存储输入数据,为了在输出时更方便,我选择了直接使用 string 类型存储输入数据和输出结果。

对于大整数的加倍,从最后一位开始,将每一位数翻倍,对应位置上的结果如果大于等于 10 ,则进位。

对于比较两者是否是一个同一群数字的不同排列,我又偷懒的选择了利用 map ,直接统计每个数字出现的次数,如果每个数字出现的次数都相同,那么显然是同一个排列。


The Codes:

#include<bits/stdc++.h>
using namespace std;
map<char , int > mp1 , mp2;
int main(){
string s , ans = "";
cin >> s ;
int temp , flag = 0 ;
for(int i = s.size() - 1 ; i >= 0 ; i --){
mp1[s[i]] ++ ; // 记录输入数字的每个数字出现的次数
temp = (s[i] - '0') * 2 + flag ; // 计算该位置上每位数的翻倍结果,加上低位来的进位
ans += to_string(temp % 10) ; // 拼接到结果中
flag = temp / 10 ; // 重新计算 进位
}
if(flag) ans += to_string(flag) ;
for(int i = ans.size() -1 ; i >= 0 ; i --) mp2[ans[i]] ++ ; // 记录结果的每个数字出现的次数
printf((mp1 == mp2)?"Yes\n":"No\n"); // 判断是否是同样数字的不同排列
reverse(ans.begin() , ans.end()) ; // ans 倒置才是翻倍结果
cout<< ans <<endl;
return 0;
}

PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642的更多相关文章

  1. PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...

  2. PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642

    PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分) 凌宸1642 题目描述: This time, you are suppos ...

  3. PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642

    PAT (Basic Level) Practice (中文)1055 集体照 (25 分) 凌宸1642 题目描述: 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每 ...

  4. PAT (Advanced Level) Practice 1001 A+B Format (20 分)

    题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400 Calculate a+b and ...

  5. PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...

  6. PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...

  7. PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642 题目描述: Being unique is so important to peo ...

  8. PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642 题目描述: To prepare for PAT, the judge someti ...

  9. PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...

随机推荐

  1. Dart & data type(static / dynamic)

    Dart & data type(static / dynamic) Darts 飞镖 标枪 javelin/darts type https://dartpad.dartlang.org/ ...

  2. node mailer & email bot

    node mailer & email bot email https://nodemailer.com/about/ https://github.com/nodemailer/nodema ...

  3. web 语音播报 & 网页阅读器

    web 语音播报 & 网页阅读器 Chrome auto speech & voice speaking http://3.141592653589793238462643383279 ...

  4. js destructuring assignment bug

    js destructuring assignment bug https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Op ...

  5. zrender & svg

    zrender & svg window.prompt double click https://codepen.io/xgqfrms/pen/jOEGNvw // https://cdn.x ...

  6. ASP.NET Core WebApi版本控制

    前言: 在日常项目开发中,随着项目需求不断的累加.不断的迭代:项目服务接口需要向下兼容历史版本:前些时候就因为Api接口为做版本管理导致接口对低版本兼容处理不友好. 最近就像了解下如何实现WebApi ...

  7. [C语言学习笔记三]格式化输出和输入

    使用 printf 函数来输出,使用 scanf 函数来输入 在 printf 函数中使用变量,需要使用占位符代替. int 型一般存储整数,使用 %d 代替 long long int 型一般存储长 ...

  8. Vue学习笔记-VSCode安装与配置

    一  使用环境: windows 7 64位操作系统 二  VSCode安装与配置  1.下载: https://code.visualstudio.com 直接点击即可. 2. 点击按装程序,默认安 ...

  9. 微信小程序:快速生成less文件类嵌套的结构

    全部选中标签结构,按住ctrl+shift+p,选中插件Generate CSS tree(提前安装CSS Tree),先删除undefined,将img替换成image,删除标签名view. 完整的 ...

  10. Mysql通过binlog恢复误update的数据

    事件: 在生产库执行update时只添加了STATUS(状态)条件,将所有状态为'E'的数据全部改为了'D' 思路: 操作步骤主要参考自文章:https://blog.csdn.net/weixin_ ...