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;
}
posted on 2015-03-11 16:21  Evence  阅读(155)  评论(0编辑  收藏  举报