用C++编写输入 输入包括若干行,每行表示一个要显示的数。每行有两个整数s和n (1 <= s <= 10, 0 <= n <= 99999999),这里n是要显示的数,s是要显示的数的尺寸。 如果某行输入包括两个0,表示输入结束。这行不需要处理。 输出 显示的方式是:用s个'-'表示一个水平线段,用s个'|'表示一个垂直线段。这种情况下,每一个数字需要占用s+2列和2s+3行。另外,在两个数字之间要输出一个空白的列。在输出完每一个数之后,输出一个空白的行。注意:输出中空白的地方都要用空格来填充。
时间: 2024-03-10 10:44:50 浏览: 94
以下是用C++编写的程序,可以实现上述功能:
```c++
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=10,M=100;
char g[N+2][M*N+M]; //存储每个数字的图案
void init(){ //初始化
memset(g,' ',sizeof g);
for(int i=1;i<=N;i++) g[i][0]=g[i][N+1]=g[i][2*N+2]='|';
for(int i=1;i<=N;i++) g[0][i]=g[N+1][i]=g[N+1][i+N+1]=g[2*N+2][i]='-';
g[0][N+1]=g[N+1][N+1]=g[N+1][2*N+2]=g[2*N+2][N+1]='+';
}
void print(int s,int num,int k){ //输出数字
int cnt=0;
while(num){
int x=num%10; //将数字拆分成每一位
num/=10;
for(int i=1;i<=N;i++) //将每一位数字的图案存储下来
for(int j=0;j<s+2;j++)
g[i][s*cnt+s+k+j+2]=g[i][s*cnt+s+k+j+2]== '|' || g[i][s*cnt+s+k+j+2]=='-' ? '+' : '-';
cnt++;
for(int i=1;i<=N;i++) //将每一位数字的图案存储下来
for(int j=0;j<s;j++)
g[i][s*cnt+s+k+j+2]=g[i][s*cnt+s+k+j+2]== '|' ? '|' : ' ';
}
}
int main(){
int s,num;
while(cin>>s>>num && s){
init();
int k=0;
print(s,num,k); //输出第一个数字
while(cin>>s>>num && s){
k+=(s+3); //计算下一个数字的起始位置
print(s,num,k); //输出下一个数字
}
for(int i=0;i<(s+2);i++){ //输出整个数字的图案
for(int j=0;j<(k+s+2);j++){
cout<<g[i][j];
}
cout<<endl;
}
cout<<endl; //输出空行
}
return 0;
}
```
注意:在循环输出每个数字的过程中,我们需要计算下一个数字的起始位置,即每个数字之间要输出一个空白的列。而这个空白的列的宽度为 `(s+3)`,其中 `s` 是当前数字的尺寸。
阅读全文