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

pat-1024 Palindromic Number

    博客分类:
  • pat
 
阅读更多
如果不是回文则进行逆序相加操作,打印出最后回文和操作次数

题目中说数字可达到10的10次方  迭代可100次
则每次相加次数可能因进位多一位,longlong型只能19位可能不够

实现重点,字符串相加
注意求进位时也要带上carry

以下代码数值型会溢出
#include<iostream>
using namespace std;


long long reverse(long long in)
{
	long long tmp = in;
	long long re = 0;
	while(tmp)
	{
		re *= 10;
		re += tmp % 10;
		tmp /= 10;
	}
	return re;
}

int main()
{
	long long N;
	int K;
	int k = 0;
	long long rN;
	cin>>N;
	cin>>K;
	while(k < K)
	{
		rN = reverse(N);
		if(rN == N)
			break;
		else
			N += rN;
		k++;
	}
	cout<<N<<endl;
	cout<<k<<endl;
}





正确代码
#include<iostream>
using namespace std;
#include<string>
#include<algorithm>


string add(string s1,string s2)
{
	int carry = 0;
	string result = "";
	int len1 = s1.size();
	int len2 = s2.size();

	int sum;
	int i,j;
	for(i = len1-1,j = len2-1;i>=0 || j>=0;i--,j--)
	{
		if(i<0)
			sum = s2[j]-'0';
		else if(j<0)
			sum = s1[i]-'0';
		else
			sum = s1[i]-'0'+s2[j]-'0';
		sum += carry;
		result.insert(result.begin(),sum%10+'0');
		carry = sum/10;
	}
	
	if(carry)
		result.insert(result.begin(),carry+'0');

	return result;
}






int main()
{
	string str;
	int K;
	int k = 0;
	string rstr;
	cin>>str;
	cin>>K;
	while(k<K)
	{
		rstr = str;
		reverse(str.begin(),str.end());
		if(rstr == str)
			break;
		else
			str = add(str,rstr);
		k++;
	}
	cout<<str<<endl;
	cout<<k<<endl;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics