PAT1023. Have Fun with Numbers

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.

Input Specification:

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

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.

Sample Input:

1234567899

Sample Output:

Yes
2469135798


提交代码

编译器
AWK (awk 4.0.1)
C (gcc 4.7.2)
C# (mcs 2.10.8.1)
C++ (g++ 4.7.2)
Go (gccgo 4.7.2)
Go (go 1.3)
Haskell (ghc 7.4.1)
Java (javac 1.6.0)
Java (gcj 4.7)
Javascript (node 0.10.33)
Lisp (clisp 2.49)
Lua (lua 5.2.1)
OCaml (ocamlc 3.12.1)
Pascal (fpc 2.6.0)
Perl (perl 5.14.2)
PHP (php 5.4.34)
Plaintext (cat 1.0)
Python (python3 3.2.3)
Python (python2 2.7.3)
Ruby (ruby 1.9.3)
Scheme (racket 5.2.1)
Shell (bash 4.2.37)
Vala (valac 0.16.1)
VisualBasic (vbnc 0.0.0.5943)

使用高级编辑器

代码

1
 
 


 思路:利用大数相乘的方法

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 int data[10]={
 6     0
 7 };
 8 struct Bignum
 9 {
10     int d[1000];
11     int len;
12     Bignum()  //构造函数
13     {
14         memset(d,0,sizeof(d));
15         len=0;
16     }
17 };
18 Bignum A;
19 void Mul()
20 {
21     int carry=0;
22     for(int i=0;i<A.len;i++)
23     {
24         A.d[i]=A.d[i]*2+carry;
25         if(A.d[i]>=10)
26         {
27             carry=A.d[i]/10;
28             A.d[i]%=10;
29         }
30         else
31             carry=0;
32
33     }
34     if(carry!=0)  //此处有错误
35     {
36         A.len++;
37         A.d[A.len-1]=carry%10;
38         carry/=10;
39     }
40 }
41 int main(int argc, char *argv[])
42 {
43
44     char ori[100];
45     scanf("%s",ori);
46     int length=strlen(ori);
47     for(int i=length-1;i>=0;i--)
48     {
49         A.d[A.len++]=ori[i]-‘0‘;
50         data[ori[i]-‘0‘]++;
51     }
52     Mul();
53     bool flag=true;
54     for(int i=A.len-1;i>=0;i--)
55     {
56         data[A.d[i]]--;
57     }
58     for(int i=0;i<10;i++)
59     {
60         if(data[i]!=0)
61         {
62             flag=false;
63             break;
64         }
65     }
66     if(flag)
67       printf("Yes\n");
68     else
69       printf("No\n");
70     for(int i=A.len-1;i>=0;i--)
71     {
72         printf("%d",A.d[i]);
73     }
74     putchar(‘\n‘);
75     return 0;
76 }

时间: 2024-08-01 22:46:29

PAT1023. Have Fun with Numbers的相关文章

PAT1023. Have Fun with Numbers (20)

#include <iostream> #include <map> #include <algorithm> using namespace std; string a; string b; bool cmp(char a,char b){ return a<b; } int main() { cin>>a; b=a; int num;int c=0; for(int i=a.length()-1;i>=0;i--){ num=(a[i]-'0

LeetCode OJ - Sum Root to Leaf Numbers

这道题也很简单,只要把二叉树按照宽度优先的策略遍历一遍,就可以解决问题,采用递归方法越是简单. 下面是AC代码: 1 /** 2 * Sum Root to Leaf Numbers 3 * 采用递归的方法,宽度遍历 4 */ 5 int result=0; 6 public int sumNumbers(TreeNode root){ 7 8 bFSearch(root,0); 9 return result; 10 } 11 private void bFSearch(TreeNode ro

129. Sum Root to Leaf Numbers

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. For example, 1 / 2 3 T

421. Maximum XOR of Two Numbers in an Array

Given a non-empty array of numbers, a0, a1, a2, - , an-1, where 0 ≤ ai < 231. Find the maximum result of ai XOR aj, where 0 ≤ i, j < n. Could you do this in O(n) runtime? Example: Input: [3, 10, 5, 25, 2, 8] Output: 28 Explanation: The maximum resul

Humble Numbers(丑数) 超详解!

给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑数为 h[n]. 算法 1: 一种最容易想到的方法当然就是从 2 开始一个一个的判断一个数是否为丑数.这种方法的复杂度约为 O( k * h[n]),铁定超时(如果你这样做而没有超时,请跟 tenshi 联系) 算法 2: 看来只有一个一个地主动生成丑数了 : 我最早做这题的时候,用的是一种比较烂的

【Scala】Scala之Numbers

一.前言 前面已经学习了Scala中的String,接着学习Scala的Numbers. 二.Numbers 在Scala中,所有的数字类型,如Byte,Char,Double,Float,Int,Long,Short都是对象,这七种数字类型继承AnyVal特质,这七种数字类型与其在Java中有相同的范围,而Unit和Boolean则被认为是非数字值类型,Boolean有false和true两个值,你可以获取到各个数字类型的最值. 复杂的数字和日期 如果需要更强大的数类,可以使用spire,sc

2、Add Two Numbers

1.Add Two Numbers--这是leedcode的第二题: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input:

[LeetCode In C++] 2. Add Two Numbers

题目: You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. Input: (2 -> 4 -> 3) + (5 -> 6 -&

[LeetCode] Compare Version Numbers

Question: Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0. You may assume that the version strings are non-empty and contain only digits and the . character.The