强化阶段 Day 4 算法笔记 3.5 进制转换

目录

1.基础知识点

2.D进制的A+B

3.在霍格沃茨找零钱

4.General Palindromic Number

5.Colors in Mars

6.A+B in Hogwarts


1.基础知识点

//x为p进制数,转换成十进制数y 
int y=0,product=1;
while(x!=0){
	y = y + (x%10)*product;
	x/=10;
	product*=p;
}

//十进制数y转换为Q进制,逆序存于数组z
int z[40],num=0;
do{
	z[num++] = y%Q;
	y=y/Q;
}while(y!=0);

2.D进制的A+B

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	int x,y,q;
	scanf("%d %d %d",&x,&y,&q);
	x+=y;
	int ans[200],num=0;
	do{
		ans[num++] = x%q;
		x/=q;
	}while(x!=0);
	
	for(int i=num-1;i>=0;i--){
		printf("%d",ans[i]);
	}
	
	return 0;
}

3.在霍格沃茨找零钱

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	int x1,x2,x3,y1,y2,y3;
	int i1=17*29,i2=29;
	scanf("%d.%d.%d %d.%d.%d",&x1,&x2,&x3,&y1,&y2,&y3);
	int w1=x1*i1+x2*i2+x3,w2=y1*i1+y2*i2+y3;
	int gap=w2-w1;
	if(gap<0){
		printf("-");
		gap-=2*gap;
	}
	x1=gap/i1;
	x2=gap%i1/i2;
	x3=gap%i1%i2;
	
	printf("%d.%d.%d",x1,x2,x3);
	
	return 0;
}

4.General Palindromic Number

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	int ans[2000],num=0;
	int x,y;
	scanf("%d %d",&x,&y);
	do{
		ans[num++]=x%y;
		x/=y;
	}while(x!=0);
	bool flag=true;
	for(int i=0;i<num;i++){
		if(ans[i] != ans[num-1-i]){
			flag=false;
		}
	}
	if(flag){
		printf("Yes\n");
	}else{
		printf("No\n");
	}
	for(int i=num-1;i>=0;i--){
		printf("%d",ans[i]);
		if(i!=0){
			printf(" ");
		}
	}
	
	return 0;
}

5.Colors in Mars

这一题比较简单,不用循环

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	char radix[15]={'0','1','2','3','4','5','6','7','8','9','A','B','C'};
	int r,g,b;
	scanf("%d%d%d",&r,&g,&b);
	printf("#");
	printf("%c%c",radix[r/13],radix[r%13]);
	printf("%c%c",radix[g/13],radix[g%13]);
	printf("%c%c",radix[b/13],radix[b%13]);
	
	
	return 0;
}

6.A+B in Hogwarts

这种写法有一个2分的测试点无法通过

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	int x1,x2,x3,y1,y2,y3;
	int i1=17*29,i2=29;
	scanf("%d.%d.%d %d.%d.%d",&x1,&x2,&x3,&y1,&y2,&y3);
	int w1=x1*i1+x2*i2+x3,w2=y1*i1+y2*i2+y3;
	long long gap=w2+w1;
	if(gap<0) gap-=2*gap;
	x1=gap/i1;
	x2=gap%i1/i2;
	x3=gap%i1%i2;
	
	printf("%d.%d.%d",x1,x2,x3);
	
	return 0;
}

可以按部就班地一步步计算结果和进位

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	int x1,x2,x3,y1,y2,y3;
	scanf("%d.%d.%d %d.%d.%d",&x1,&x2,&x3,&y1,&y2,&y3);
	int r1,r2,r3;
	int carry;
	r3=(x3+y3)%29;
	carry=(x3+y3)/29;
	r2=(x2+y2+carry)%17;
	carry=(x2+y2+carry)/17;
	r1=x1+y1+carry;
	
	
	printf("%d.%d.%d",r1,r2,r3);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aixiaoxiao13/article/details/121749462
今日推荐