[NOIP1999]回文数

题目:
洛谷 P1015回文数
计蒜客 [NOIP1999]回文数
缺乏的能力:
大数相加减(字符串)、任何进制数的运算运算。
未完成的代码:

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

//N为进制,M为数值 
char M[c];
int N;
int ans = 0;

bool judge_huiwen(char *M)
{
	int length = strlen(M);
	for(int i=0; i<length/2; i++)
		if(M[i]!=M[length-i-1])
			return 0;
	return 1;
}

void add_reself(M)	//字符串反转载相加 (考虑进制) 
{
	char re_M[1005];
	int length = strlen(M);	
	for(int i=0; i<length; i++)	//字符串反转
		re_M[i] = M[length-i-1];
		
	//字符串看出数值载相加减
	//大数运算
	//玩不起玩不起。。。 
		
} 

int main()
{
	cin >> N >> M;
	
	while( judge_huiwen(M)==1 && ans <= 30)
	{
		add_reself(M);
		ans++;
	}
	if(step <= 30)
		cout << "STEP=" << ans << endl;
	else
		cout << "Impossible!";
	
	return 0;
} 

学完橙书后参考的代码(AC):

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

string M; 
int N;
int ans = 0;

char num[20] = "0123456789ABCDEF";


bool judge_huiwen(string M)
{
	string re_M = M;
	reverse(re_M.begin(), re_M.end());
	if(re_M == M)	return 1;
	else return 0;
}

//十进制大整数加法 //套用 
string add(string str1, string str2)
{
	string str;	//保存结果的字符串 
	int len1 = str1.length();
	int len2 = str2.length();
	if(len1<len2)
		for(int i=1; i<=len2-len1; i++)
			str1 = "0" + str1;
	else
		for(int i=1; i<=len1-len2; i++)
			str2 = "0" + str2;
	len1 = str1.length();
	int cf = 0, temp = 0;
	for(int i=len1-1; i>=0; i--)	//从个位开始 
	{
		temp = 0;
		if(str1[i] >= 'A')
			temp += str1[i] - 'A' + 10;
		else
			temp += str1[i] - '0';
		if(str2[i] >= 'A')
			temp += str2[i] - 'A' + 10;
		else
			temp += str2[i] - '0';		
		temp += cf;	
		
		cf = temp/N;	//进位 
		temp %= N;		//进位后的本位 
		str = (char)num[temp] + str;	//数字转字符,加到结果字符串str前 
	}
	if(cf!=0)	//若最高位进位,则加再结果str前 
		str = (char)num[cf] + str;
	return str;
}

string add_reself(string M)	//字符串反转载相加 (考虑进制) 
{
	string re_M = M;
	reverse(re_M.begin(), re_M.end());
	return add(M, re_M); 		
} 

int main()
{
	cin >> N >> M;
	
	while( judge_huiwen(M)==0 && ans <= 30)
	{
		M = add_reself(M);
		ans++;
	}
	if(ans <= 30)
		cout << "STEP=" << ans ;
	else
		cout << "Impossible!";
	
	return 0;
} 
发布了32 篇原创文章 · 获赞 15 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览