【题目描述】 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,她想向你求助,作为一位优秀的程序员,你当然不会拒绝。 输入文件(madition.in): 第一行先输入一个运算的进制N(2<=N<=36),接下来的两行为需要进行运算的字符,其中每个字符串的长度不超过200位.其为N进制的数。其中包括0-9及a-z(代表10-35). 输出文件(madition.out): 在N进制下它们的和. 输入样例1: 20 1234567890 abcdefghij 输出样例1: bdfi02467j 输入样例2: 20 99999jjjjj 9999900001 输出样例2: iiiij00000 题解: 本题较水,就是一个高精度计算,很简单,注意初始化有小技巧,可以把对应字母代表的数字记录下来用,呵呵,15分钟秒过! 原程:C++语言: made by PaulInsider! #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int n,lq,lw; char e[210],r[210]; int q[210]={0},w[210]={0}; int a[210]={0}; char f[37]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; void jia(); int main() { freopen ("madition.in","r",stdin); freopen ("madition.out","w",stdout); scanf("%d\n",&n); cin>>e>>r; lq=strlen(e); lw=strlen(r); for (int i=0;i<lq;i++) { if (e[i]-'0'>=10) { q[lq-i]=e[i]-'0'-39; } else { q[lq-i]=e[i]-'0'; } } for (int i=0;i<lw;i++) { if (r[i]-'0'>=10) { w[lw-i]=r[i]-'0'-39; } else { w[lw-i]=r[i]-'0'; } } jia(); return 0; } void jia() { int jin[220]={0}; int b; if (lq>lw) { b=lq; } else { b=lw; } for (int i=1;i<=b;i++) { a[i]=q[i]+w[i]; } for (int i=1;i<=b;i++) { jin[i+1]=(a[i]+jin[i])/n; a[i]=(a[i]+jin[i])%n; if (i==b&&jin[i+1]) { b++; } } for (int i=b;i>=1;i--) { cout<<f[a[i]]; } }
神牛飘过,水牛留步!
|