ZOJ 1205 - Martian Addition 解题报告

简介: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1205           题目说明:(把题目从GOOGLE翻译的结果修改而来)           在22世纪,科学家们发现智能居民生活在火星。

          http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1205

          题目说明:(把题目从GOOGLE翻译的结果修改而来)

          在22世纪,科学家们发现智能居民生活在火星。火星人非常喜欢数学。每一年,他们将举行一次火星算术大赛(计算机) ,竞赛内容是计算两个100位数的和,使用时间最少的人获得冠军。今年,他们还邀请地球上的人参加竞赛。 
          作为唯一代表地球,你发送给火星以展示人类的力量。幸运的是你带去的的笔记本电脑可以帮助您快速完成工作。现在剩下的问题只是写一个小程序来计算的两个给定数字的和。然而,在你开始写程序前要注意的是,火星人使用20进制数,因为它们通常有20个手指。 

          输入: 
          给定一些火星数,每个一行。火星数是由0到9 ,和小写字母 a 至 j 组成的(小写字母a开始分别代表10 , 11 , ... , 19 )。所有给定数字的位数不会超过100 。 

          输出: 
          对于每一对数字,在一行中输出它们的和。 

          样本输入: 

          1234567890 
          abcdefghij 
          99999jjjjj 
          9999900001 

          示例输出: 

          bdfi02467j 
          iiiij00000

 

          =================================================

          此题也是一道简单题目,和前一篇文章中的题目非常类似,过程是:

          (1)解析输入的一行字符串,并保存到一个char[]中。由于输入时从最高位写到个位,而数组中从个位到高位。因此这是一个类似于把字符串逆转的过程。同时,还要把字符转换为相应的实际数值。

          (2)按照加法的法则进行计算。

          (3)输出结果。这一步必须注意一些比较特殊的情况。例如如果输入是两个0,必须能打印出“0”。

 

          完整代码如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif Code - 1205
/* ZOJ - 1205 , 20进制数想加 */
#include 
<stdio.h>
#include 
<string.h>

char* NUMS="0123456789abcdefghij";

/*分别是读取的输入行,加数a,b,计算结果c */
char line[105],a[105],b[105],c[105];

/*字符换算为实际数值,例如'a'->10,'b'->11*/
int CharToVal(char c)
{
    
return strchr(NUMS, c)-NUMS;
}

/*解析输入*/
void CopyNum(char* dest, const char* line)
{
    
int i,len=strlen(line);
    
for(i=0;i<len;i++)
    {
        dest[i]
=CharToVal(line[len-1-i]);
    }
}

/*打印加法结果,注意结尾如果为0也要打印0*/
void PrintResult()
{
    
int i=101;
    
while(c[i]==0) i--;
    
    
if(i<0) i=0;        /*非常重要,可以保证至少要打印一个0。*/
    
    
for(;i>=0;i--)
    {
        printf(
"%c", NUMS[c[i]]);
    }
    printf(
"\n");
}

/*做加法: c=a+b; */
void Add()
{
    
int i;
    
int k=0,sum;/*进位的数值*/
    
for(i=0;i<102;i++)
    {
        sum 
= a[i] + b[i] + k;
        c[i] 
= sum%20;
        k 
= sum/20;
    }
}

int main()
{
    
while(scanf("%s",line)!=EOF && strcmp(line,"END")!=0)
    {
        memset(a,
0,sizeof(a));
        memset(b,
0,sizeof(b));
        memset(c,
0,sizeof(c));
        CopyNum(a,line);            
/*获取加数A*/
        scanf(
"%s",line);
        CopyNum(b,line);            
/*获取加数B*/
        Add();                                
/*C=A+B;*/
        PrintResult();                
/*打印出结果*/
    }
    
return 0;
}
目录
相关文章
|
8月前
|
网络架构
POJ 3250 Bad Hair Day、POJ 2796 Feel Good(单调栈)
POJ 3250 Bad Hair Day、POJ 2796 Feel Good(单调栈)
HDU-1097,A hard puzzle(快速幂)
HDU-1097,A hard puzzle(快速幂)
|
数据挖掘
HDU-1032,The 3n + 1 problem(水题)
HDU-1032,The 3n + 1 problem(水题)
HDOJ(HDU) 1898 Sempr == The Best Problem Solver?(水题、、、)
HDOJ(HDU) 1898 Sempr == The Best Problem Solver?(水题、、、)
100 0
ZOJ Problem Set - 3758 素数
ZOJ Problem Set - 3758 素数
80 0
|
Web App开发 Java 数据安全/隐私保护
HDOJ(HDU) 1563 Find your present!(异或)
HDOJ(HDU) 1563 Find your present!(异或)
214 0
|
Go
HDOJ(HDU) 1977 Consecutive sum II(推导、、)
HDOJ(HDU) 1977 Consecutive sum II(推导、、)
87 0
|
Java
HDOJ(HDU) 1720 A+B Coming(进制)
HDOJ(HDU) 1720 A+B Coming(进制)
88 0
|
数据挖掘
HDOJ 1032(POJ 1207) The 3n + 1 problem
HDOJ 1032(POJ 1207) The 3n + 1 problem
110 0