讨论 / 好ws数据
飞雪天涯 2008-11-12 07:46:00
点我顶贴 收藏 删除
第五组:居然出现六位数!
#1 飞雪天涯@2008-10-27 07:48:00
回复 删除
发一下程序:

/*

Show Problem

题目:霍格沃茨的A+B

问题编号:310 [提交该题] [讨论该问题] [有关讨论] [Who AC] [相关题解]

My Flag:Unsubmited

题目类型

模拟

描述

如果你是哈迷的话,肯定知道在《哈利·波特》一书里,霍格沃茨(Hogwart)魔法学校是很有名的。

现在Harry Potter就读Hogwart一年级,他遇到了一个小麻烦,现在需要你来帮他。在Hogwart,A+B是很奇特的。

它是按质数的顺序来进位的。例如:1,0+2,1=1,0,1(用,来分隔每一位)。个位是2进制,十位是3进制,百位是5进制,

千位是7进制,万位是11进制……Hogwart一年级要求计算的两个加数的最高位是万位。

输入格式

输入一个形如1,0+2,1字符串s。

输出格式

输出相加后的结果。

样例输入

1,0+2,1

样例输出

1,0,1

*/

#include<cctype>

#include<string>

#include<iostream>

#define comma ","

using namespace std;

int main (void){

char alphabet[11]={’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’A’};

int ws[6]={2,3,5,7,11,18};

int a[6]={0},b[6]={0},ans[6]={0},posa,posb;posa=posb=0;

string s;cin>>s;

int pos=s.find(’+’);

string s1=s.substr(0,pos);

//cout<<s1<<’ ’;

string s2=s.substr(pos+1,s.size()-pos-1);

//cout<<s2<<’ ’;

for (int i=s1.size()-1;i>=0;i-=2){

int c;

if (isdigit(s1[i]))c=s1[i]-’0’;

else c=10;

if (i!=0&&isdigit(s1[i-1]))

c+=10;

a[posa++]=c;

}

//for (int i=posa-1;i>=0;i--) cout<<a[i]<<’ ’;cout<<endl;

for (int i=s2.size()-1;i>=0;i-=2){

int c;

if (isdigit(s2[i]))c=s2[i]-’0’;

else c=10;

if (i!=0&&isdigit(s2[i-1]))

c+=10;

b[posb++]=c;

}

//for (int i=posb-1;i>=0;i--) cout<<b[i]<<’ ’;cout<<endl;

int posc=max(posa,posb);

for (int i=0;i<posc;i++){

ans[i]=a[i]+b[i];

}

//for (int i=posc-1;i>=0;i--) cout<<ans[i]<<’ ’;cout<<endl;

for (int i=0;i<posc;i++){

if (ans[i]>=ws[i]){

ans[i]-=ws[i];

ans[i+1]++;

}

}

if (ans[posc]!=0)

posc++;

//for (int i=posc-1;i>=0;i--) cout<<ans[i]<<’ ’;cout<<endl;

string res="";

for (int i=posc-1;i>0;i--){

res+=alphabet[ans[i]];

res+=comma;

//cout<<alphabet[ans[posc]]+’,’;

}

//cout<<endl;

res+=alphabet[ans[0]];

cout<<res;

//while(1);

return 0;

}

/*

1,0+2,1

1+10,6,4,2,1

=======

1,0,1

*/

#2 飞雪天涯@2008-11-12 07:46:00
回复 删除
uh~oh
查看更多回复
提交回复