POJ1051

看着挺麻烦的,写起来倒很顺手,把莫斯吗当做数字来存储就好,剩下的就是判断了。

今天刚搞定毕设,双爽爽的,写道题庆祝一下,就是代码太乱,懒得改。

#include <iostream>
#include <math.h>
using namespace std;


int po(int m){
int i,k=1;
for(i=0;i<m;i++)
k*=10;
return k;


}




int l[50],fn[3000],num[10000],xl[1000];
int main(){
int zn[100]={
12,
2111,
2121,
211,
1,
1121,
221,
1111,
11,
1222,
212,
1211,
22,
21,
222,
1221,
2212,
121,
111,
2,
112,
1112,
122,
2112,
2122,
2211,
1122,
1212,
2221,
2222
};
int i;
for(i=0;i<50;i++){
fn[zn[i]]=i;
if(zn[i]>1000)
l[i]=4;
else{
if(zn[i]>100)
l[i]=3;
else
{
if(zn[i]>10)
l[i]=2;
else
l[i]=1;
}
}
}
int z=0,kl=0,kn=0,m=0,ml=0,km=0,t=0,tn=1;
char s[1000],p;
cin>>t;
while(t>0){
cin>>s;
cout<<tn<<": ";
tn++;
z=0,kl=0,kn=0,m=0,ml=0,km=0;
for(i=0;i<strlen(s);i++){
z=s[i]-'A';
if(z<0 || z>25){
switch(s[i]){
case'_':z=26;break;
case'.':z=28;break;
case',':z=27;break;
    case'?':z=29;break;
}
}
xl[kl]=l[z];
kl++;
ml=l[z];
m=zn[z];
while(m>0){
num[kn+ml]=m%10;
ml--;
m=m/10;
}
kn+=l[z];
}
ml=1;
for(i=kl-1;i>=0;i--){
m=xl[i];
km=0;
while(m>0){
km+=num[ml]*po(m-1);
ml++;
m--;
}
z=fn[km];
if(z>=0 && z<26){
p='A'+z;
cout<<p;
}
else{
switch(z){
    case 26:cout<<"_";break;
case 27:cout<<",";break;
case 28:cout<<".";break;
case 29:cout<<"?";break;


}


}
}
cout<<endl;
t--;
}
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值