『ACMプログラム設計』本の訓練問題の中のH問題

1353 ワード

簡単に言えば、各グループの2つの20進数の数で、11~19はa~zで表され、結果も20進数が出力されます.
まず文字列形式で文字列配列に入力し、それから文字を対応する10進数に変換して整数配列に保存することを考えます.ここでは、2つの文字列が異なると、短い1番目の位置から加算されることに注意してください.そして得られたものと20を1つ入れ、配列が境界を越えないように注意し、c[0]が20を超えると出力時に直接「1」を出力すればよい.そして10より大きいものを対応するアルファベットに変換します.
コードは次のとおりです.
include
#include
#include
#include
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='0'&&a[i]<='9') c[i]+=a[i]-'0';
if (a[i]>='a'&&a[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)]='0'&&b[i]<='9') c[i]+=b[i]-'0';
if (b[i]>='a'&&b[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)]0;i--)
if (c[i]>=20) {c[i-1]++;c[i]-=20;}
for (i=0;i=20&&i==0) {
cout<

実は考えをはっきりさせさえすれば、基本的にできることは多くありません.