CSP-J刷题记录文档

CSP-J刷题记录文档

  • 基础算法
    • 8 字符串
      • 8.1 字符型
      • 8.2 字符串基础
        • 1115. 数字和
      • 8.3 字符串进阶
        • 1100. 词组缩写
    • 10 进制转换
      • 10.1 10进制和R进制互转
      • 10.2 2进制和8/16进制互转
      • 10.3 额外训练
        • 1386 . 小丽找半个回文数

基础算法

8 字符串

8.1 字符型

8.2 字符串基础

1115. 数字和
#include
using namespace std;

int main(){
	string a;
	int sum=0;
	cin>>a;
	for(int i=0;i<a.size();i++){
		sum += (a[i]-'0');
	}
	cout<<sum;
	return 0;
}

8.3 字符串进阶

1100. 词组缩写
#include
using namespace std;
int main(){
	
	string a;
	while(cin>>a)
	{
		char c = toupper(a[0]);
		cout<<c;
	}
} 

10 进制转换

任何进制都没有他的本身:因为他们是从0开始的
10进制:
0 1 2 3 4 5 6 7 8 9 10 11
2进制: 
0 1 10 11 100 101 110 111 1000
8进制:
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20
16进制:
0 1 2 3 4 5 6 7 8 9 A B C D E F 
10 11 12 13 14 15 16 17 18 19 1A 
1B 1C 1D 1E 1F 20 21 22 23 24 25

(1)10进制转R进制(任意进制的意思):采用除R取余法
如果转成10进制,就除以10
如果转成2进制,就除以2
易错点:从后往前读
CSP-J刷题记录文档_第1张图片
(2)R进制转10进制:按权展开
所谓权就是:主要看R进制,R进制如果是10进制,那么权就是10的多少次方,如果R进制是2进制,那么权就是2的多少次方。(记得从低位开始)
注意:任何进制的0次方都是1

简便方法:2进制转10进制
例子:1010 转成10进制

1 0 1 0
8 4 2 1
将有1 的地方对应的数加起来 得到:8+2=10

假设是6位2进制数:101010

 1  0  1  0   1   0
32 16  8  4   2   1
对应的1加起来:32+8+2=42

CSP-J刷题记录文档_第2张图片
CSP-J刷题记录文档_第3张图片

10.1 10进制和R进制互转

10.2 2进制和8/16进制互转

10.3 额外训练

1386 . 小丽找半个回文数
思路:任何进制的转换函数
1、定义一个数组
2、采用while获取获取值不为0
3、取出对应进制的余数
4、计数
5、得到对应进制的商
#include
using namespace std;

bool huiwen(int n,int d){
	bool r=true;
	int k=0;
	int a[1000]={0};
	while(n!=0){
		a[k]=n%d;
		k++;
		n=n/d;
	}
	for(int i=0;i<k/2;i++){
		if(a[i]!=a[k-i-1]){
			r=false;
			break;
		}
	}
	return r;
}
int main(){
	int a[110],n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
		if(huiwen(a[i],10)==false&&(huiwen(a[i],16)==true)||(huiwen(a[i],2)==true)){
			cout<<a[i]<<endl;
		}
	} 
	
	
	
	return 0;
}

你可能感兴趣的:(c++,算法,开发语言)