《ACM程序设计》书 训练题中的H题

来源:互联网 发布:凯迪拉克atsl轮毂数据 编辑:程序博客网 时间:2024/06/02 07:16
题意简单的来说,就是每组两个二十进制的数,11到19用a到z表示,结果也是输出二十进制。
     思路是先以字符串形式输入到字符串数组里,然后将字符转化为相应的十进制数,存到整型数组里,这里要注意两个字符串如果不一样长,就要从短的那个第一位的位置开始相加。然后把得到的和20进一位,注意数组不要越界,c[0]超过20便在输出时直接输出一个“1”就好。然后再把大于10的转化为相应的字母。代码如下:


#include<iostream>
#include<iomanip>
#include<cmath>
#include<string.h>
using namespace std;
int main()
{string a,b;
long long e,f,g,h,c[100],d,i=0,j,n,max,min;
while (cin>>a>>b)
{h=2;
for (i=0;i<100;i++) c[i]=0;
e=a.length();
f=b.length();
if (e>f) {max=e;h=1;} else {h=0;max=f;}
if (h==1)
for (i=0;i<max;i++)
{if (a[i]>='0'&&a[i]<='9') c[i]+=a[i]-'0';
if (a[i]>='a'&&a[i]<'z') c[i]+=a[i]-'a'+10;
if (i>=abs(e-f))
{if (b[i-(e-f)]>='0'&&b[i-(e-f)]<='9') c[i]+=b[i-(e-f)]-'0';
if (b[i-(e-f)]>='a'&&b[i-(e-f)]<'z') c[i]+=b[i+f-e]-'a'+10;}
}
else 
for (i=0;i<max;i++)
{if (b[i]>='0'&&b[i]<='9') c[i]+=b[i]-'0';
if (b[i]>='a'&&b[i]<'z') c[i]+=b[i]-'a'+10;
if (i>=abs(e-f))
{if (a[i-abs(e-f)]>='0'&&a[i-abs(e-f)]<='9') c[i]+=a[i-abs(e-f)]-'0';
if (a[i-abs(e-f)]>='a'&&a[i-abs(e-f)]<'z') c[i]+=a[i-abs(e-f)]-'a'+10;}
}
for (i=max-1;i>0;i--)
if (c[i]>=20) {c[i-1]++;c[i]-=20;}
for (i=0;i<max;i++) {
if (c[0]>=20&&i==0) {
cout<<"1";
c[0]-=20;

}
 if (c[i]<10) cout<<c[i];
else cout<<char(c[i]+87);
}cout<<endl;
}
 return 0;}


其实只要把思路理清楚了,基本上就能做的差不多。
0 0
原创粉丝点击