1023 Have Fun with Numbers

第一遍刷pat

一道水题罢了,stl大法好

题目意思

  • 给一个数,乘2,得到一个新的数,如果这个新的数是原数那些数字的一个新排列组合,就Yes
  • 其中要注意的是乘二可能导致这个数比原来多一位
  • 因为这个数最长可能有20位,所以肯定要用字符串啦,然后刚好字符串有那么多函数可以用用

我的憨憨程序

#include
#include
#include
using namespace std;

int main()
{
	char a[25]={0};
	char b[25]={0};//用于存放原数的二倍的值,倒着存好存一些,也方便sort排序 
	char c[25]={0};//用于输出结果,顺着存,第一位保留用来放可能的进位 
	int len=0,j=0;
	int p=0;//进位 
	scanf("%s",a);
	len=strlen(a);
	for(int i=len-1;i>=0;i--)
	{
		b[j]=(a[i]-'0')*2%10+p+'0';
		c[i+1]=b[j];
		p=(a[i]-'0')*2/10;
		j++; 
	}	
	if(p!=0) 
		c[0]=p+'0';
	sort(a,a+len);
	sort(b,b+len);
	if(strcmp(a,b)==0) //将两个字符串排序再比较,如果相同就是要找的数 
		printf("Yes\n");
	else
		printf("No\n");
	if(c[0]==0)	
		printf("%s\n",c+1);
	else
		printf("%s\n",c);
} 

你可能感兴趣的:(PAT甲级真题练习,字符串)