20進位制的大數加法
阿新 • • 發佈:2018-11-11
地球人用十進位制是因為有十根手指,外星人有20根呢?
#include <cstdio> #include <cstdlib> #include <iostream> #include <cstring> #include <cmath> #define MIN(a,b) (a<b?a:b) #define MAX(a,b) (a>b?a:b) #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; char str1[110], str2[110]; int num1[110], num2[110], num[110]; int main(){ int i, j; int len1, len2, len; while(scanf("%s%s", str1, str2)){ mem(num1, 0); mem(num2, 0); mem(num, 0); len1 = strlen(str1); len2 = strlen(str2); len = MAX(len1, len2); /*轉換為20進位制*/ for(i=0; i<len1; ++i){ if(str1[i]>='0'&&str1[i]<='9') num1[len1-i] = str1[i]-'0'; else num1[len1-i] = str1[i]-'a'+10; } for(i=0; i<len2; ++i){ if(str2[i]>='0'&&str2[i]<='9') num2[len2-i] = str2[i]-'0'; else num2[len2-i] = str2[i]-'a'+10; } /*相加*/ for(i=1; i<=len+1; ++i){ num[i] = num[i-1]/20+num1[i]+num2[i]; num[i-1] = num[i-1]%20; } //去除前面的0 for(i=len+1; i>1; --i) if(num[i]) break; for (j=i; j>0; --j){ if(num[j]>9) printf("%c", num[j]-10+'a'); else printf("%d", num[j]); } printf("\n"); } return 0; }