其实就是高精度,只需要稍微一点改进
#include <stdio.h> #include <string.h> #include <ctype.h> int getNum(char ch){ if (isdigit(ch)) return ch - '0'; else return ch + 10 - 'A'; } char getCh(int num){ if (num >= 10) { return 'A' + num - 10; } else return num + '0'; } void Cal(char*s1,char*s2,int b){ char res[100]; int len1 = strlen(s1),len2 = strlen(s2); int i,total = 0,i1 = len1 - 1,i2 = len2 - 1,x = 0; while (i1 >= 0) { int a1,a2; a1 = getNum(s1[i1]); a2 = getNum(s2[i2]); res[total] = getCh((a1 + a2 + x) % b); x = (a1 + a2 + x) / b; i1 --; i2 --; total ++; } while (i2 >= 0){ int a; a = getNum(s2[i2]); res[total] = getCh((a + x) % b); x = (a + x) / b; i2 --; total ++; } if (x > 0){ res[total] = '1'; total ++; } for (i=total-1;i>=0;i--){ printf("%c",res[i]); } printf(" "); } int main(){ int b; char s1[100],s2[100]; while (scanf("%d %s %s",&b,s1,s2)!=EOF){ int res[100]; int len1 = strlen(s1),len2 = strlen(s2); if (len1 < len2) { Cal(s1,s2,b); } else { Cal(s2,s1,b); } } return 0; }