分析:直接记录字符对应数字进行输入输出
#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; }
分析:前处理,判断字符串规格后是否在字符串末尾添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; }