题目 1161: 回文数(二)

题目 1161: 回文数(二)

输入
共两行
第一行为进制数N(2<=N<=16)
第二行为N进制数M(0<=M<=maxlongint)

输出
共一行,为“STEP=经过的步数”或“Impossible!”

  思路:1.进制转换。2.模块化处理   3.三个子程序-将输入数字和逆序加和并
  进制处理---将数字按正序和逆序进行排序储存数组---将两个数组对比,
  相同则STEP加1
nt add(int x,int y)  //加和的进制转换 
{
	int a[1000];
	int b[1000];
	int i,j,k;
	int zhuan,zhuan1,sum,sumadd,sum1,place,sumadd1;
	zhuan=x;  
	sum=0;   sumadd=0;  sum1=0; place=0;  sumadd1=0;
	while(zhuan!=0)  //输入数字的位数 
	{
		zhuan=zhuan/10;
		sum+=1;
	}
	zhuan1=x;
	for(i=sum-1;i>=0;i--)  //将位数输入数组 
	{
		a[i]=zhuan1%10;
		zhuan1=(zhuan1-zhuan1%10)/10;
	 } 
	for(i=0;i<sum;i++)
	{
		sum1+=a[i]*pow(10,i);
	 } 
	sumadd=sum1+x;
	while(sumadd>0)
	{
		b[place]=sumadd%y;
		sumadd=sumadd/y;
		place+=1;
	}
	for(i=0;i<place;i++)
	{
		sumadd1+=b[i]*pow(10,i);
	}
    //进制转换 
	return sumadd1;
}

第一二

int place_z(int x)  //正向储存 
{
	int a[100];
	int place=0;
	while(x>0)
	{
	a[place]=x%10;
	x=x/10;
	place++;	
	}
	return a[100];
}

int place_f(int x)  //反向储存 
{
	int b[100];
    int place=0,i;
	int y=x;
	while(y>0)
	{
		y=y/10;
		place++;
	}
	for(i=place-1;i>=0;i--)
	{
		b[i]=x%10;
		x=x/10;
	}
	return b[100];
}

int lenght(int x)
{
	int place;
		while(x>0)
	{
		x=x/10;
		place++;
	}
	return place;
}

<--------------------------------三--------------------------------------------->

int contrast(int x,int y)  
{
	int a[100];
	int b[100];
	int place,i;
	int ww=0;
	a[100]=place_z(x);
	b[100]=place_f(x);
	place=lenght(x);
	for(i=0;i<place;i++)
	{
		if(a[i]!=b[i])
		{
			x=add(x,y);
			a[100]=place_z(x);
	        b[100]=place_f(x);   
	        ww+=1;
		}
		else
		break;
	}
	printf("%d",ww);
	return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值