、
代码如下:
#include <stdio.h> #include <string.h> int buf[6]={0,2,3,5,7,11}; void Swap(char &a,char &b) { char c=a; a=b; b=c; } void ReverseString(char *s) { int i=0; int j=strlen(s)-1; while (i<j) { Swap(s[i],s[j]); ++i;--j; } } void Add(char *A,char *B,char *C) { char AA[100]; char BB[100]; char CC[100]; strcpy(AA,A); strcpy(BB,B); ReverseString(AA); ReverseString(BB); int carry=0; int i; int step = 1; int lenCC=0; for (i=0;i<strlen(AA) && i<strlen(BB);++i) { if (AA[i]==',') continue; int tmp=carry; if(AA[i]=='A') tmp+=10; else tmp+=(AA[i]-'0'); if(BB[i]=='A') tmp+=10; else tmp+=(BB[i]-'0'); carry = tmp/buf[step]; int tmp2 = tmp%buf[step]; if(tmp2>=10) CC[lenCC++]='A'; else CC[lenCC++]=tmp2+'0'; step++; } while (i<strlen(AA)) { if (AA[i]==',') { ++i; continue; } int tmp=carry; if(AA[i]=='A') tmp+=10; else tmp+=(AA[i]-'0'); carry = tmp/buf[step]; int tmp2 = tmp%buf[step]; if(tmp2>=10) CC[lenCC++]='A'; else CC[lenCC++]=tmp2+'0'; step++; ++i; } while (i<strlen(BB)) { if (BB[i]==',') { ++i; continue; } int tmp=carry; if(BB[i]=='A') tmp+=10; else tmp+=(BB[i]-'0'); carry = tmp/buf[step]; int tmp2 = tmp%buf[step]; if(tmp2>=10) CC[lenCC++]='A'; else CC[lenCC++]=tmp2+'0'; step++; ++i; } if (carry) { if (carry>=10) { CC[lenCC++]='A'; } else { CC[lenCC++]=carry+'0'; } } CC[lenCC]=0; ReverseString(CC); //printf("%s\n",CC); int lenC=0; bool first=true; for (int i =0;i<strlen(CC);++i) { if(first) { C[lenC++] = CC[i]; first =false; } else { C[lenC++] = ','; C[lenC++] = CC[i]; } } C[lenC]=0; } int main() { freopen("in.txt","r",stdin); char s[20]; char s1[20]; char s2[20]; char s3[20]; //scanf("%s+%s",s1,s2); scanf("%s",s); int pos=0; for (int i=0;i<strlen(s);++i) { if(s[i]=='+') { pos = i; break; } } for (int i=0;i<pos;++i) { s1[i] = s[i]; } s1[pos] = 0; for (int i=pos+1;i<strlen(s);++i) { s2[i-pos-1] = s[i]; } s2[strlen(s)-pos-1] = 0; Add(s1,s2,s3); printf("%s\n",s3); return 0; }