[NOIP]数制转换

设有一个字符串A $的结构为:A $ ='m <n> p'

其中米为数字串(长度<= 20),而N,P均为1或2位的数字串(其中所表达的内容在2-10之间)。

要求:从键盘上读入甲$后(不用正确性检查),将甲$中的数字串米(N进制),以p进制的形式输出。

例如:48 <10> 8

其意义为:将10进制数48,转换成8进制数输出。

输出结果为:60 <8>

 

 

这个题目纯属自己想出来的算法,

可以说完全按照第一思路写出来的,肯定不是最佳算法,不过也AC啦。以下贴上代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main (void)
{
	char a[100],digit[100]={0},digit1[100]={0},digit2[100]={0};
	int shuzi1=0,jinzhi=0,shuzi2=0,yushu=0,shang=0,shuzu[100]={0},shuzi[100],t1=0,x=0;
	int length,i=0,t=0;
	scanf("%s",a);
	length=strlen(a);
	
	for(i=0;i<length;i++){
		if(a[i]=='<')
			break;
		digit[i]=a[i];;
	}

	i++;
	
	for(;i<length;i++){
		if(a[i]=='>')
		break;
		digit1[t]=a[i];
		t++;
	}

	i++;
	t=0;

	for(;i<length;i++){
		digit2[t]=a[i];
		t++;
	}
	
	shuzi1=atoi(digit);
	jinzhi=atoi(digit1);
	shuzi2=atoi(digit2);
	
	if(jinzhi!=10){
		x=shuzi1;
		while(x!=0){
		shuzi[t1]=x%10;
		x=x/10;
		t1++;
	}
		shuzi1=0;
	for(int i=t1-1;i>=0;i--){
		shuzi1=shuzi1+shuzi[i]*pow(jinzhi,i);
	}
	}
		
	jinzhi=10;
	if(jinzhi==10)
	{
		shuzu[yushu]=shuzi1%shuzi2;
		
		shang=shuzi1/shuzi2;
	
		yushu++;
		
		while(shang!=0){
			shuzu[yushu]=shang%shuzi2;
			
			shang=shang/shuzi2;
			
			yushu++;
		}
			for(int i=yushu-1;i>=0;i--)
				printf("%d",shuzu[i]);
			printf("<%d>",shuzi2);
	}
	
 } 

思路很简单,以‘<’,‘>’字符为分隔符,将输入的字符串分割成待转换的数字,原来的进制,需要转换的进制三个字符串,然后用atoi方法将三个字符串转换成int型的数字。

然后就是进制转换算法,进制之间如何转化这里不多加赘述,如果原来的数字是十进制的,则直接进行进制转换,如果不是十进制,则将数字先转换成十进制,再进行进制转换。

 

NOOB纯手打,如有不足,欢迎指正!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值