1234567890 abcdefghij 99999jjjjj 9999900001
bdfi02467j iiiij00000
解题思路:
求两个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进制的两个大数相加)
原文地址:http://blog.csdn.net/sr_19930829/article/details/41286027