C. 人见人爱A+B
计算A+B。
Input
输入只有一组数据,数据包含5行,有两个数a,b(0 <= a,b <= 100000),用空格隔开。
更多解释请看Hint。
Output
对于每组数据,输出a+b的结果。
更多解释请看Hint。
Sample Input
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
| | | | | | | | | | |
+-+ + + +-+ + +-+ + +-+ + +
| | | | | | | | | |
+-+ +-+ +-+ + +-+ + +-+ + +
Sample Output
+-+ +-+ + +-+ +-+
| | | | | |
+-+ +-+ + +-+ +-+
| | | | | | |
+-+ +-+ + +-+ +-+
Hint
对样例输入的解释:

表示的数据是30579 7577
对样例输出的解释:

表示的数据是38156。
注意在这个问题中,0~9分别是下面这样表示的:

请严格按照给定的输入输出格式,否则将导致Presentation Error。
代码:
#include<stdio.h>
char h[][16]={"+-+| |+ +| |+-+",
" + | + | +",
"+-+ |+-+| +-+",
"+-+ |+-+ |+-+",
"+ +| |+-+ | +",
"+-+| +-+ |+-+",
"+-+| +-+| |+-+",
"+-+ | + | +",
"+-+| |+-+| |+-+",
"+-+| |+-+ |+-+"};
char s[5][60];
int a,b;
int digit(int k){
int i,j,t,has[10]={0};
for(i=0;i<5;i++)
for(j=0;j<3;j++)
if(s[i][j+k]==0) return -1;
else{
for(t=0;t<10;t++)
if(h[t][j+i*3]!=s[i][k+j]) has[t]=1;
}
for(i=0;i<10;i++) if(!has[i]) return i;
return -1;
}
int deal(){
int k=0,d;
a=b=0;
while((d=digit(k))!=-1)
a=a*10+d,k+=4;
k+=4;
while((d=digit(k))!=-1)
b=b*10+d,k+=4;
return a+b;
}
void print(int res){
int k=0,i,j,len=0,tmp[10];
if(res==0) len=1,tmp[0]=0;
else{
while(res){
tmp[len++]=res%10;
res/=10;
}
}
while(len--){
for(i=0;i<5;i++)
for(j=0;j<3;j++)
s[i][j+k]=h[tmp[len]][j+i*3];
k+=4;
}
for(i=0;i<5;i++){
s[i][k-1]=0;
puts(s[i]);
}
}
int main(){ // ?????~ ?????壬???
gets(s[0]);
gets(s[1]);
gets(s[2]);
gets(s[3]);
gets(s[4]);
int res=deal();
print(res);
return 0;
}

被折叠的 条评论
为什么被折叠?



