[ACM] ZOJ Martian Addition (20进制的两个大数相加)
Martian Addition
Time Limit: 2 Seconds Memory Limit: 65536 KB
In the 22nd Century, scientists have discovered intelligent residents live on the Mars. Martians are very fond of mathematics. Every year, they would hold an Arithmetic Contest on
Mars (ACM). The task of the contest is to calculate the sum of two 100-digit numbers, and the winner is the one who uses least time. This year they also invite people on Earth to join the contest.
As the only delegate of Earth, you're sent to Mars to demonstrate the power of mankind. Fortunately you have taken your laptop computer with you which can help you do the job quickly.
Now the remaining problem is only to write a short program to calculate the sum of 2 given numbers. However, before you begin to program, you remember that the Martians use a 20-based number system as they usually have 20 fingers.
Input:
You're given several pairs of Martian numbers, each number on a line.
Martian number consists of digits from 0 to 9, and lower case letters from a to j (lower case letters starting from a to present 10, 11, ..., 19).
The length of the given number is never greater than 100.
Output:
For each pair of numbers, write the sum of the 2 numbers in a single line.
Sample Input:
1234567890
abcdefghij
99999jjjjj
9999900001
Sample Output:
bdfi02467j
iiiij00000
Source: Zhejiang University Local Contest 2002, Preliminary
解题思路:
求两个20进制的数的和,用数组模拟相加就能够。
代码:
#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <map>
using namespace std;
map<int,char>change; char num[105];
int add1[105];
int add2[105];
int ans[105];
int jin[105]; void prepare()
{
change[0]='0';change[1]='1';change[2]='2';change[3]='3';
change[4]='4';change[5]='5';change[6]='6';change[7]='7';
change[8]='8';change[9]='9';change[10]='a';change[11]='b';
change[12]='c';change[13]='d';change[14]='e';change[15]='f';
change[16]='g';change[17]='h';change[18]='i';change[19]='j';
} int main()
{
prepare();
while(cin>>num)
{
memset(add1,0,sizeof(add1));
memset(add2,0,sizeof(add2));
memset(jin,0,sizeof(jin));
int len1=strlen(num);
int t=0;
for(int i=len1-1;i>=0;--i)
{
if(!(num[i]>='0'&&num[i]<='9'))
add1[t++]=num[i]-87;
else
add1[t++]=num[i]-'0';
}
cin>>num;
int len2=strlen(num);
t=0;
for(int i=len2-1;i>=0;--i)
{
if(!(num[i]>='0'&&num[i]<='9'))
add2[t++]=num[i]-87;
else
add2[t++]=num[i]-'0';
}
//输入处理完成
//for(int i=0;i<len2;i++)
// cout<<add2[i];
//cout<<endl; int len=max(len1,len2);
for(int i=0;i<=len;i++)
{
int temp=add1[i]+add2[i]+jin[i];
if(temp>=40)
{
ans[i]=temp-40;
jin[i+1]=2;
}
else if(temp>=20)
{
ans[i]=temp-20;
jin[i+1]=1;
}
else
ans[i]=temp;
}
if(ans[len])
cout<<change[ans[len]];
for(int i=len-1;i>=0;i--)
cout<<change[ans[i]];
cout<<endl;
}
return 0;
}
[ACM] ZOJ Martian Addition (20进制的两个大数相加)的更多相关文章
- ZOJ Martian Addition
Description In the 22nd Century, scientists have discovered intelligent residents live on the Mars. ...
- ZOJ Problem Set - 1205 Martian Addition
一道简单题,简单的20进制加减法,我这里代码写的不够优美,还是可以有所改进,不过简单题懒得改了... #include <stdio.h> #include <string.h> ...
- ZOJ 1205 Martian Addition
原题链接 题目大意:大数,20进制的加法计算. 解法:convert函数把字符串转换成数组,add函数把两个大数相加. 参考代码: #include<stdio.h> #include&l ...
- PAT1027 Colors in Mars (20分) 10进制转13进制
题目 People in Mars represent the colors in their computers in a similar way as the Earth people. That ...
- ASCII和16进制
所谓的ASCII和16进制都只是概念上的东西,在计算机中通通是二进制 转换应该是输出的转换,同样是一个数,在计算机内存中表示是一样的,只是输出不一样ASCII是针对字符的编码,几乎是键盘上的字符的编码 ...
- python进制转换及变量
.编译型语言和解释型语言的区别? 答: () 编译型语言:是将所有源码编译完成二进制后才进行输出,运行快,执行效率高,时间周期长. ()解释型语言:逐行编译输出,执行效率相对慢,开发效率高, .Pyt ...
- ASCII码与16进制的互相转换(表)
所谓的ASCII和16进制都只是概念上的东西,在计算机中通通是二进制 转换应该是输出的转换,同样是一个数,在计算机内存中表示是一样的,只是输出不一样ASCII是针对字符的编码,几乎是键盘上的字符的编码 ...
- 数组中hashCode就是内存地址,以及汉字幻化为16进制或10进制
int[] arr4={1,2,3,4,5}; System.out.println("arr4: "+arr4); System.out.println("arr4.h ...
- 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过
杭电ACM(1002)大数相加 A + B Problem II Problem DescriptionI have a very simple problem for you. Given two ...
随机推荐
- 【BZOJ 2982】 2982: combination (卢卡斯定理)
2982: combination Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 510 Solved: 316 Description LMZ有n个 ...
- CentOS 报错cannot execute binary file
在安装软件过程中执行文件,报错cannot execute binary file 1.查看是否root用户登录,当前用户是否有可执行权限 2.ls -l 查看文件是否具有可执行权限 3.要使用对应的 ...
- android studio 可以汉化的 文件 地方
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 汉化包 百度云盘 下载地址:https://pan.baidu.com/s/1pLjwy ...
- [APIO2015]巴厘岛的雕塑 --- 贪心 + 枚举
[APIO2015]巴厘岛的雕塑 题目描述 印尼巴厘岛的公路上有许多的雕塑,我们来关注它的一条主干道. 在这条主干道上一共有\(N\)座雕塑,为方便起见,我们把这些雕塑从 1 到\(N\)连续地进行 ...
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) E. Bear and Forgotten Tree 2 bfs set 反图的生成树
E. Bear and Forgotten Tree 2 题目连接: http://www.codeforces.com/contest/653/problem/E Description A tre ...
- mysqldump导出CSV格式及where导出时间范围问题解决
众所周知,mysqldump不但可以导出sql格式,还可以导出csv格式. 导出CSV格式的具体使用如下命令. mysqldump -uroot -ppassword -S /tmp/mysql999 ...
- Jenkins使用jenkins-cli.jar进行远程调用时出现“ERROR: No such job 'test'”或者权限不够等问题解决(Windows)
网上最提倡的解决办法是用SSH的key进行登录,但是我发觉Linux上非常容易实现,但是Windows压根不知道在哪里设置. 原文:https://issues.jenkins-ci.org/brow ...
- LM27313 (ACTIVE) 具有 30V 内部 FET 开关(采用 SOT-23 封装)的 1.6 MHz 升压转换器
The LM27313 switching regulator is a current-mode boost converter with a fixed operating frequency o ...
- javascript比较两个时间大小
//var yourtime=document.getElementById('begin_time').value; var yourtime='2010-12-10 11:12'; yourtim ...
- linux 编译win32程序
apt-get install mingw32 int main(int argc, char *argv) { printf("Windows Compiler Test\n") ...