算法笔记学习笔记08

3.5 进制转换

问题 A: 又一版 A+B

#include<iostream>

using namespace std;

int main(){
	int m;
	unsigned int a, b, y;
	while(cin>>m,m){
		int num=0, z[40];
		cin>>a>>b;
		y = a+b;
		do{
			z[num++] = y%m;
			y = y/m;
		}while(y!=0);
		for(int i=num-1; i>=0; i--) cout<<z[i];
		cout<<endl;
	}
	
	return 0;
}

问题 B: 数制转换

#include<iostream>
#include<string>

using namespace std;

int main(){
	int a, b;
	string n;
	while(cin>>a>>n>>b){  
		unsigned long int x=0, p=1;
		for(int i=n.size()-1; i>=0; i--){
			if(n[i]>='0'&&n[i]<='9') x = x+(n[i]-'0')*p;
			if(n[i]>='a'&&n[i]<='f') x = x+(n[i]-'a'+10)*p;
			if(n[i]>='A'&&n[i]<='F') x = x+(n[i]-'A'+10)*p;
			p = p*a;
		}
		
		int  num = 0;
		char z[90];
		do{
			if (x%b<10){
				z[num++] = x%b+'0';
			}
			else
				z[num++] = x%b+'A'-10;
			x = x/b;
		} while (x != 0);

		for(int i=num-1; i>=0; i--) cout<<z[i];
		cout<<endl;
	}
	
	return 0;
}

问题 C: 进制转换

#include<iostream>
#include<string>

using namespace std;

int main(){
	string a;
	while(cin>>a){
		int sum=1, num=0; 
		char n[100]; 
		while(sum){
			sum = 0;
			for(int i=0; i<a.size(); i++){
				int x = a[i]-'0';
				int d = x/2;
				sum += d;
				if(i < a.size()-1){
					a[i+1] = x%2*10+a[i+1];
				}
				if(i == a.size()-1){
					n[num++] = x%2+'0'; 
				}
				a[i] = d+'0';
			}
			
		}
		for(int i=num-1; i>=0; i--) cout<<n[i];
		cout<<endl;
	}
	
	return 0;
}

问题 D: 八进制 

#include<iostream>
#include<string>

using namespace std;

int main(){
	int n;
	while(cin>>n){
		int z[40], num=0;
		do{
			z[num++]=n%8;
			n=n/8;
		}while(n!=0);
		for(int i=num-1; i>=0; i--) cout<<z[i];
		cout<<endl;
	}
	
	return 0;
}

3.6 字符串处理 

问题 A: 字符串连接

 

#include<iostream>
//#include<string>

using namespace std;

int main(){
	char a[210], b[110];
	while(cin>>a>>b){
		int i=0, j=0;
		while(a[i]!='\0') i++;
		while(b[j]!='\0') a[i++]=b[j++];
		a[i]='\0';
		cout<<a<<endl;
	}
	return 0;
}

问题 B: 首字母大写 

#include<iostream>
#include<string>

using namespace std;

int main(){
	char s[110];
	while(gets(s)){
		int i=0;
		if(s[0]>='a'&&s[0]<='z') s[0] = s[0]-'a'+'A';
		while(s[i]!='\0'){
			if((s[i]==' '||s[i]=='\t'||s[i]=='\r'||s[i]=='\n')){
				if(s[i+1]>='a'&&s[i+1]<='z'){
					s[i+1]=s[i+1]-'a'+'A';
				}
			}
			i++;
		}
		printf("%s\n",s);
	}
	return 0;
}

问题 I: 【字符串】回文串

#include <iostream>
#include <string>

using namespace std;
 
int main(){
	string s;
	int f = 1;
	cin>>s;
	for(int i=0; i<s.size()/2; i++){
		if(s[i] != s[s.size()-1-i]){
			f = 0;
			break;
		}
	}
	if(f) cout<<"YES"<<endl;
	else cout<<"NO"<<endl;
		
    return 0;
}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值