`
linest
  • 浏览: 150244 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

pat-1023 Have Fun with Numbers

    博客分类:
  • pat
阅读更多
判断一个数乘2后是否是原数的一个排列

思路:
int最大值 2147483647  10位
longlong 最大值 9223372036854775807  19位
不满足题目20位  故不能数值型  只能字符串处理

考虑乘积后进位问题

排列的判断用二进制移位求和即可,和值相等即为排列。 

#include<iostream>
using namespace std;
#include<string>

int add(int n)
{
	return 1<<n;
}

void compare(string str)
{
	int len = str.length();
	int carry = 0;
	int tmp;
	int sign1 = 0;
	int sign2 = 0;

	while(len)
	{
		sign1 += add(str[len-1]-'0');
		tmp = (str[len-1]-'0')*2;
		str[len-1] = '0' + tmp%10 + carry;
		sign2 += add(str[len-1]-'0');
		carry = (tmp+carry)/10;
		len--;
	}

	if(sign1==sign2)
	{
		cout<<"Yes"<<endl;
	}
	else
	{
		cout<<"No"<<endl;
	}

	if(carry == 0)
		cout<<str<<endl;
	else
		cout<<carry<<str<<endl;
}


int main()
{
	string in;
	cin>>in;
	compare(in);
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics