1205 Martian Addition

 这是一道20进制相加的习题,关键点在于把字母与数之间的转换,巧妙地利用strchr函数可以进行转换。下面是有位师兄写的吧,代码清晰,很容易看懂。

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 char* NUMS="0123456789abcdefghij";
 5  
 6 /*分别是读取的输入行,加数a,b,计算结果c */
 7  char line[105],a[105],b[105],c[105];
 8  
 9 /*字符换算为实际数值,例如'a'->10,'b'->11*/
10  int CharToVal(char c)
11  {
12      return strchr(NUMS, c)-NUMS;
13  }
14  
15 /*解析输入*/
16  void CopyNum(char* dest, const char* line)
17  {
18      int i,len=strlen(line);
19      for(i=0;i<len;i++)
20      {
21          dest[i]=CharToVal(line[len-1-i]);
22      }
23  }
24  
25 /*打印加法结果,注意结尾如果为0也要打印0*/
26  void PrintResult()
27  {
28      int i=101;
29      while(c[i]==0) i--;
30      
31      if(i<0) i=0;        /*非常重要,可以保证至少要打印一个0。*/
32      
33      for(;i>=0;i--)
34      {
35          cout<<NUMS[c[i]];
36      }
37      cout<<endl;
38  }
39  
40 /*做加法: c=a+b; */
41  void Add()
42  {
43      int i;
44      int k=0,sum;/*进位的数值*/
45      for(i=0;i<102;i++)
46      {
47          sum = a[i] + b[i] + k;
48          c[i] = sum%20;
49          k = sum/20;
50      }
51  }
52  
53 int main()
54  {
55      while(cin>>line)
56      {
57          memset(a,0,sizeof(a));
58          memset(b,0,sizeof(b));
59          memset(c,0,sizeof(c));
60          CopyNum(a,line);            /*获取加数A*/
61          cin>>line;
62          CopyNum(b,line);            /*获取加数B*/
63          Add();                                /*C=A+B;*/
64          PrintResult();                /*打印出结果*/
65      }
66      return 0;
67  }

 

posted @ 2013-01-20 21:48  简单地快乐  阅读(263)  评论(0编辑  收藏  举报