搜索比赛C题

C. 人见人爱A+B

1000ms
1000ms
65536KB
64-bit integer IO format: %lld Java class name: Main
Font Size:

计算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;
}


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值