日常刷题

杭电oj

1072题解

今天的题主要看是否能后看懂题目,首先这里输入的A和B是都是十六进制,所以求的是两个十六进制的数的和的十进制是多少,一开始我是觉得比较蒙的,因为我的第一反应是去定义abcdef,还要分大小写什么的,觉得实现起来比较麻烦,后来在网上查找发现在实现的过程输入输出中有比较简单的方法
C++

#include 
using namespace std;
int main(){
    int a,b;
    while(cin>>hex>>a>>hex>>b)
    cout<<a+b<<endl;
    return 0;
}

hex表示的是十六进制
dec表示的是十进制,一般会默认为十进制
oct表示八进制
bin表示二进制

C语言

#include 
int main() {
	int a,b;
	while(~scanf("%x %x",&a,&b)) {
		printf("%d\n",a+b);
	}
	return 0;
}

十六进制为%x
十进制为%d
八进制为%o
二进制在C语言中没有这种输入输出但是可以用itoa();函数实现各种进制的转换

1062题解

#include 
#include 
int main()
{
	int n,l;
	char s[1001];
	scanf("%d",&n);
	getchar();
	while(n--)
	{
		int flag=0;
		gets(s);
		l=strlen(s);
		for(int i=0;i<=l;i++){
			if(s[i]==' '){
				for(int j=i-1;j>=flag;j--){
					printf("%c",s[j]);
				}
				printf(" ");
				flag=i+1;
			}
		}
		for(int j=l-1;j>=flag;j--){
			printf("%c",s[j]);
		}
		printf("\n");
	}
	return 0;
}

这题就是一个代码调换的问题,比较需要注意的就是flag的定义一定要在while里或者重新给flag赋值,否则会出现缺少单词的情况

2104题解

#include 
#include
using namespace std;
int main() {
	int n,m,flag;
	while(scanf("%d%d",&n,&m)!=EOF) {
		if(n==-1&&m==-1)
		break;
		while(m!=0) {
			flag=m;
			m=n%m;
			n=flag;
		}
		if(flag==1)
			printf("YES\n");
		else
			printf("POOR Haha\n");
	}
	return 0;
}

此题唯一需要注意的就是辗转相除法求是否有最大公约数,理解题意比较重要,此题主要讲的就是N个人围成一圈Haha会每走一次隔M-1人一直走,判断是否会在所有人那里都停留过

你可能感兴趣的:(笔记,c语言)