1. 程式人生 > 實用技巧 >PAT 1027 Colors in Mars (20分)

PAT 1027 Colors in Mars (20分)

題目

題目連結PAT A1027 Colors in Mars (20分)

解題思路

思路01

1 進位制轉換。十進位制轉換為十三進位制
2 如果轉換後是一位前面補充一位0

思路02

根據題目已知,十進位制數字最大為168(對應十三進製為CC),可知轉換為十三進位制後最大為CC,所以轉換後一定是兩位,x/13 x%13(x為十進位制數)

易錯點

當某種顏色轉換為十三進位制後,如果是一位數字,需在前面補充一位0

知識點

1 進位制轉換
2 字串拼接字串

單詞

digit 數字(可數)
decimal 十進位制的;小數
radix 基數;根

Code

Code 01

#include <iostream>
#include <algorithm>
using namespace std;
const int p = 13;
/*
	十進位制轉十三進位制 
*/
string convert(int x){
	string s;
	int temp;
	do{
		temp = x%p;
		if(temp>=10)s+=temp-10+'A';
		else s+=temp+'0';
		x /= p;
	}while(x!=0);
	if(s.length()==1)s.append("0");
	reverse(s.begin(),s.end());
	return s;
}
int main(int argc,char * argv[]) {
	int r,g,b;
	scanf("%d%d%d",&r,&g,&b);
	string rs = convert(r);
	string gs = convert(g);
	string bs = convert(b);
	rs.append(gs).append(bs);
	printf("#%s",rs.c_str());
	return  0;
}

Code 02

#include <iostream>
#include <string>
using namespace std;
/*
1. char 字元陣列定義初始化
*/
int main(int argc,char *argv[]) {
	char c[14]= {"0123456789ABC"};
	int num;
	cout<<"#";
	for(int i=0; i<3; i++) {
		cin>>num;
		printf("%c%c",c[num/13],c[num%13]);
	}
	return 0;
}