PAT:1023. Have Fun with Numbers (20) AC

#include<stdio.h>
#include<string.h>
char str[30];            //输入的数字
int tmp[30];            //*2后逆序的数字

int cntstr[10];            //输入数字0-9的个数

int tmpI=0,jin=0;          //*2的时候的int数组下标和进位数
void Double(char* str,int len1)
{
  memset(tmp,0,sizeof(tmp));    //将str*2并按个位在左,高位在右方式存储

  for(int i=len1-1 ; i>=0 ; --i)
  {
    int now=jin+(str[i]-‘0‘)*2;    //【skill】要变成数字,-‘0‘而不是+‘0‘
    tmp[tmpI++]=now%10;
    jin=now/10;
  }
  if(jin!=0)        //最后进位存在,则进,不存在,就不进
    tmp[tmpI++]=jin;

}

int main()
{
  scanf("%s",str);
  int len1=strlen(str);
  Double(str,len1);
  bool tag=1;            //判断是否y n
  if(len1!=tmpI)
  {
    tag=0;
  }
  else
  {
    memset(cntstr,0,sizeof(cntstr));
    for(int i=0 ; i<len1 ; ++i)
      ++cntstr[str[i]-‘0‘];
    for(int i=0 ; i<tmpI ; ++i)
      --cntstr[tmp[i]];
    for(int i=0 ; i<10 ; ++i)
      if(cntstr[i]!=0)
      {
        tag=0;
        break;
      }
  }
  if(0==tag)
    printf("No\n");
  else
    printf("Yes\n");
  for(int i=tmpI-1 ; i>=0 ; --i)  //逆序输出正常数
    printf("%d",tmp[i]);

  return 0;
}
时间: 2024-10-01 02:22:27

PAT:1023. Have Fun with Numbers (20) AC的相关文章

PAT Advanced 1023 Have Fun with Numbers (20) [?整数运算]

题目 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 i

PAT:1002. 写出这个数 (20) AC

#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char str[111]; scanf("%s",str); int len=strlen(str); int sum=0; for(int i=0 ; i<len ; ++i) sum+=str[i]-'0'; char A[10][5]={"ling","yi",

PAT:1058. A+B in Hogwarts (20) AC

#include<stdio.h> #include<stdlib.h> int main() { int a1,b1,c1,a2,b2,c2; //[思维]168以内的数字可以用两位13进制数表示,大大简化代码 scanf("%d.%d.%d",&a1,&b1,&c1); scanf("%d.%d.%d",&a2,&b2,&c2); int ra,rb,rc,tmp; //ra,rb,rc存放

PAT:1003. 我要通过!(20) AC

#include<stdio.h> #include<string.h> int main() { int n; scanf("%d",&n); while(n--) { char str[110]; scanf("%s",str); int len=strlen(str); int numP=0,numT=0,other=0; //记录P,T,非P,A,T的字符个数 int PI=-1,TI=-1; //记录P T的位置 for(i

PAT 1069. The Black Hole of Numbers (20)

For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in

PAT:1055. The World&#39;s Richest (25) AC

#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct Person { char name[10]; int age,money; }P[100010]; bool cmp(Person a,Person b) { if(a.money!=b.money) return a.money>b.money; else if(a.age!=b.age) r

PAT乙级1023. 组个最小数(20 分)

1023 组个最小数(20 分) 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558. 现给定数字,请编写程序输出能够组成的最小的数. 输入格式: 输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0.数字 1.……数字 9 的个数.整数间用一个空格分隔.10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字

PAT (Advanced Level) 1023. Have Fun with Numbers (20)

手动模拟一下高精度加法. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<map> #include<queue> #include<vector> using namespace std; char s[30],t[30],c[30]; int lens,len

PAT:1069. The Black Hole of Numbers (20) AC

#include<stdio.h> #include<algorithm> using namespace std; const int AIM=6174; int n; int arr[4]; bool NonIncreasingOrder(int a,int b) { return a>b; } bool NonDecreasingOrder(int a,int b) { return a<b; } int toNum() //得到这个数字 { int sum=0;