问题 A: 大整数加法
题目描述
计算两个大整数的和。大整数是指超过了c,c++表示范围的整数,如1234567890000000000000000000
输入格式
输入包括两个大整数,每个大整数不超过100位,用空格或者换行隔开
输出格式
输出两个大整数的和
输入样例 复制
222222222222222222222
333333333333333333333
输出样例 复制
555555555555555555555
#include<stdio.h>
#include<string.h>
int main(){
int integer1[101]={0},integer2[101]={0};
char num1[101]={'\0'},num2[101]={'\0'};
int i,j,k=0;
scanf("%s %s",num1,num2); //以字符串形式读入两个大整数
for(i=0,j=strlen(num1)-1;j>=0;j--){
integer1[i]=num1[j]-'0';//数组的第0位是整数的个位
i++;
}
for(i=0,j=strlen(num2)-1;j>=0;j--){
integer2[i]=num2[j]-'0';
i++;
}
for(k=0;k<=100;k++){
integer1[k]+=integer2[k];
if(integer1[k]>=10){
integer1[k+1]++; //进位
integer1[k]-=10;
}
if(k>strlen(num1)){
break;
}
}
for(k=100;k>=0;k--){
if(integer1[k]!=0){ //找到不为0的最高位
break;
}
}
for(i=k;i>=0;i--){
printf("%d",integer1[i]); //从不为0的最高位开始输出
}
return 0;
}
问题D: 括号匹配问题
题目描述
判断仅由小括号组成的字符串是否满足括号匹配规则
输入格式
输入包括多行,每行一个仅有小括号组成的字符串,长度不超过100
输出格式
输出包括多行,如果对应的输入括号匹配,输出YES,否则输出NO
输入样例 复制
()()()
((()))
())(
((()
输出样例 复制
YES
YES
NO
NO
#include<iostream>
#include<string>
using namespace std;
int main(){
string s; //string类在c里没有
int i;
while(cin>>s){
int flag=1; //默认匹配即flag=1
int last=s.length()-1; //last是最后一位的下标
for(i=0;i<last;i++){
if(s[i]=='('){
if(s[i+1]==')'){ //一对空括号
i++; //跳过)
}else if(s[last]==')'){ //和最后的)匹配
last--;
}else{
flag=0; //不匹配
break;
}
}
else if(s[i]!='('){ //左边的是)也不匹配
flag=0;
break;
}
}
if(flag==1&&s.length()>1){ //如果括号只有一个,不能输出YES
cout<<"YES"<<endl;
}else cout<<"NO"<<endl;
}
return 0;
}
问题 H: 寻找第K大的数
题目描述
要求在N个不重复的整数中,找出第K大的整数 ,其中0<K<N<1000000
输入格式
输入第一行为两个正整数N K
第二行为N个整数,输入保证这N个整数两两相异,每个整数的范围在-1000000到1000000之间
输出格式
输出第K大的整数值
输入样例 复制
5 3
3 2 4 5 1
输出样例 复制
3
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
int a[n],i;
for(i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n); //sort注意参数是头指针和尾指针
cout<<a[n-k];
return 0;
}
问题 F: 统计字母个数
题目描述
给定一段文章,请输出每个字母出现的次数
输入格式
只有一组输入数据,该数据大小<10KB。在文章中除最后一个字符外,只有小写字母、空格和换行符,没有另外的标点、数字和大写字母等。该文章以’#’结尾。
输出格式
输出格式为“C A”,C为’a’…’z’中的字母,A为出现次数,C和A之间空一格
输入样例 复制
here is the input
this is the article#
输出样例 复制
a 1
b 0
c 1
d 0
e 5
f 0
g 0
h 4
i 5
j 0
k 0
l 1
m 0
n 1
o 0
p 1
q 0
r 2
s 3
t 5
u 1
v 0
w 0
x 0
y 0
z 0
#include<iostream>
using namespace std;
int main(){
char essay[10000];
int i=0;
cin>>essay[i];
while(essay[i]!='#'){
i++;
cin>>essay[i];
}
int letter[26];
for(i=i-1;i>=0;i--){
if(essay[i]>='a'&&essay[i]<='z'){
letter[essay[i]-'a']++;
}
}
for(i=0;i<26;i++){
cout<<(char)(i+'a')<<" "<<letter[i]<<endl;
}
return 0;
}