Main » 2011 » November » 6 » 火星上的加法运算(解题报告+原程)
10:42 AM
火星上的加法运算(解题报告+原程)

【题目描述】 

最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,她想向你求助,作为一位优秀的程序员,你当然不会拒绝。
输入文件(madition.in):
第一行先输入一个运算的进制N(2<=N<=36),接下来的两行为需要进行运算的字符,其中每个字符串的长度不超过200位.其为N进制的数。其中包括0-9及a-z(代表10-35).
输出文件(madition.out):
在N进制下它们的和.
 
输入样例1:
20
1234567890
abcdefghij
 
输出样例1:
bdfi02467j
 
输入样例2:
20
99999jjjjj
9999900001
 
输出样例2:
iiiij00000
题解:
本题较水,就是一个高精度计算,很简单,注意初始化有小技巧,可以把对应字母代表的数字记录下来用,呵呵,15分钟秒过!
原程:C++语言

made by PaulInsider!
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int n,lq,lw;
char e[210],r[210];
int q[210]={0},w[210]={0};
int a[210]={0};
char f[37]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
void jia();
int main()
{
    freopen ("madition.in","r",stdin);
    freopen ("madition.out","w",stdout);
    scanf("%d\n",&n);
    cin>>e>>r;
    lq=strlen(e);
    lw=strlen(r);
    for (int i=0;i<lq;i++)
    {
        if (e[i]-'0'>=10)
        {
            q[lq-i]=e[i]-'0'-39;
        }
        else
        {
            q[lq-i]=e[i]-'0';
        }
    }
    for (int i=0;i<lw;i++)
    {
        if (r[i]-'0'>=10)
        {
            w[lw-i]=r[i]-'0'-39;
        }
        else
        {
            w[lw-i]=r[i]-'0';
        }
    }
    jia();
    return 0;
}
void jia()
{
    int jin[220]={0};
    int b;
    if (lq>lw)
    {
        b=lq;
    }
    else
    {
        b=lw;
    }
    for (int i=1;i<=b;i++)
    {
        a[i]=q[i]+w[i];
    }
    for (int i=1;i<=b;i++)
    {
        jin[i+1]=(a[i]+jin[i])/n;
        a[i]=(a[i]+jin[i])%n;
        if (i==b&&jin[i+1])
        {
            b++;
        }
    }
    for (int i=b;i>=1;i--)
    {
        cout<<f[a[i]];
    }
}



神牛飘过,水牛留步!

Views: 427 | Added by: dandan | Tags: NOIP | Rating: 0.0/0
Total comments: 0
Name *:
Email *:
Code *: