码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P1952 火星上的加法运算_NOI导刊2009提高(3)

时间:2017-12-15 20:49:59      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:max   sam   cst   tar   程序员   region   ref   else   std   

题目描述

最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限.她想向你求助,作为一位优秀的程序员,你当然不会拒绝。

输入输出格式

输入格式:

 

第一行先愉入一个运算的进制N(2<=N<=36),接下来两行为需要进行运算的字符,其中每个字符串的长度不超过200位,其为N进制的数。其中包括0-9及a-z(代表10-35)。

 

输出格式:

 

在N进制下它们的和

 

输入输出样例

输入样例#1: 复制
20
1234567890
abcdefghij
输出样例#1: 复制
bdfi02467j
思路:模拟。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans[3010];
char s1[2010],s2[2010];
int main(){
    scanf("%d",&n);
    scanf("%s",s1);
    scanf("%s",s2);
    int len1=strlen(s1);
    int len2=strlen(s2);
    for(int i=0;i<=(len1-1)/2;i++)
        swap(s1[i],s1[len1-i-1]); 
    for(int i=0;i<=(len2-1)/2;i++)
        swap(s2[i],s2[len2-i-1]);
    int len=max(len1,len2);
    for(int i=0;i<len1;i++)
        if(s1[i]>=0&&s1[i]<=9)    ans[i]+=s1[i]-0;
        else ans[i]+=s1[i]-a+10;
    for(int i=0;i<len2;i++)
        if(s2[i]>=0&&s2[i]<=9)    ans[i]+=s2[i]-0;
        else ans[i]+=s2[i]-a+10;
    for(int i=0;i<len;i++)
        if(ans[i]>=n){
            ans[i+1]+=ans[i]/n;
            ans[i]=ans[i]%n;
            if(i==len-1)    len++;
        }
    for(int i=len-1;i>=0;i--)
        if(ans[i]>=0&&ans[i]<=9)    cout<<ans[i];
        else cout<<char(ans[i]-10+a);
}

 

 

洛谷 P1952 火星上的加法运算_NOI导刊2009提高(3)

标签:max   sam   cst   tar   程序员   region   ref   else   std   

原文地址:http://www.cnblogs.com/cangT-Tlan/p/8044674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!