华科2017年计算机学院机试题(c++)
发布时间
阅读量:
阅读量

分析:直接记录字符对应数字进行输入输出
#include<iostream>
using namespace std;
int main(){
char c;
cin>>c;
if('A'<=c&&c<='Z'){
int n=c-'A';
for(int i=0;i<=n;i++)
{
for(int j=0;j<i;j++)
cout<<" ";
for(int k=0;k<=n-i;k++)
{
char s='A'+k;
cout<<s<<" ";
}
for(int k=n-i-1;k>=0;k--){
char s='A'+k;
cout<<s<<" ";
}
cout<<endl;
}
}
if('a'<=c&&c<='z'){ //两个部分可以统一处理减少代码
int n=c-'a';
for(int i=0;i<=n;i++)
{
for(int j=0;j<i;j++)
cout<<" ";
for(int k=0;k<=n-i;k++)
{
char s='a'+k;
cout<<s<<" ";
}
for(int k=n-i-1;k>=0;k--){
char s='a'+k;
cout<<s<<" ";
}
cout<<endl;
}
}
return 0;
}


分析:在分析过程中进行的前期处理步骤包括核查字符串规格后是否需要在字符串末尾补足末尾的零。随后将字符转换为对应的数值表示,并将其重新编码后添加至字符串末端即可完成整个数据补充过程。
#include<iostream>
#include<string>
using namespace std;
string news;
int main(){
string str;
getline(cin,str);
if(str.size()%2)str+="0";
int sum=0;
for(int i=0;i<str.size();i++){
sum=sum*10+str[i]-'0';
if(i%2){
sum+=32;
news+=sum;
sum=0;
}
}
cout<<news<<endl;
return 0;
}

3.任意两个大数(正数)相加
分析:由于数值可能会溢出,在这种情况下可以考虑使用字符串模拟相加的过程。这种方法类似于处理两个链表连接的问题。
#include<iostream>
#include<string>
using namespace std;
int main(){
string a,b,c;
getline(cin,a);
getline(cin,b);
int k=0;//进位标识符
int n=a.size(),m=b.size();
//下面步骤类似于两链表拼接
while(m&&n) {
int h=a[--n]+b[--m]-'0'-'0'+k;
c+=h%10+'0';
k=h/10;
}
while(n>0){
int h=a[--n]-'0'+k;
c+=h%10+'0';
k=h/10;
}
while(m>0){
int h=b[--m]-'0'+k;
c+=h%10+'0';
k=h/10;
}
if(k)//进位到最高位
c+=k+'0';
for(int i=c.size();i>0;){
cout<<c[--i];
}
cout<<endl;
return 0;
}

全部评论 (0)
还没有任何评论哟~
