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 }