用Python作弊…
T = int(input()) i = 0 while i < T: print(“case #%d:” % i) a_s, b_s = input().split() a = int(a_s, 16) b = int(b_s, 16) print(“%x”.upper() % (a + b)) i += 1
优雅优雅
#include <cstdio> #include <iostream> #include <stdlib.h> #include <cstring> using namespace std; const int N = 233; struct bigNum{ int a[N]; bigNum(){ memset(a,sizeof(a),0); for (int i=0;i<N;i++)a[i] = 0; } void print(){ for (int i = a[0]; i>0; i--){ printf("%X",a[i]); } puts(""); } bigNum operator + (const bigNum &b){ bigNum c; c.a[0] = max(a[0], b.a[0]); int x = 0; for (int i=1;i<=c.a[0];i++){ //printf("b[i] = %d", b.a[i]); x += a[i] + b.a[i]; c.a[i] = x % 16; x /= 16; } if (x) c.a[++c.a[0]] = x; return c; } }a, b; //您妈,java题 int qd(char x){ if ('0' <= x && x <= '9')return x - '0'; return x - 55; } bigNum jd(string st){ bigNum ans; //printf("!!!!!%d\n",ans.a[0]); ans.a[0] = st.length(); for (int i=1; i <= ans.a[0]; i++){ ans.a[i] = qd(st[ans.a[0] - i]); } return ans; } int main(){ //freopen("in.txt","r",stdin); int T;scanf("%d", &T); string st1, st2; for (int cas = 0;cas < T;cas++){ printf("case #%d:\n", cas); cin >> st1 >> st2; a = jd(st1); b = jd(st2); bigNum c = a + b; c.print(); } return 0; }
注意0+0=0这一组数据
有没有完整的测试数据啊。
求测试案例 [em:02]
#include <bits/stdc++.h> using namespace std; int todigit(char c) { if (isdigit(c)) return c - '0'; return c - 'A' + 10; } char tohexch(int c) { if (c < 10) return c + '0'; return c - 10 + 'A'; } void addCarry(int& i, int& carry, const string& s, string& res) { while (i < s.size()) { int val = todigit(s[i]) + carry; carry = val / 16; val %= 16; res = tohexch(val) + res; ++i; } } int main() { int T; cin >> T; for (int c = 0; c < T; ++c) { int carry = 0, i; string n, m; cin >> n >> m; reverse(n.begin(), n.end()), reverse(m.begin(), m.end()); string res; for (i = 0; i < n.size() && i < m.size(); ++i) { int val = todigit(n[i]) + todigit(m[i]) + carry; carry = val / 16; val %= 16; res = tohexch(val) + res; } addCarry(i, carry, n, res); addCarry(i, carry, m, res); if (carry != 0) res = tohexch(carry) + res; printf("case #%d:\n%s\n", c, res.data()); } }
瑞哥送答案来啦
int main() { int n,i=0,m,v,j,k,z; char s[205],t[205],p[16]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,’A’,’B’,’C’,’D’,’E’,’F’},q[205]; scanf(“%d”,&v); getchar(); while(v-i) { memset(s,0,sizeof(s)); memset(t,0,sizeof(t)); memset(q,0,sizeof(q)); m=0; n=0; z=0; scanf(“%s %s”,s,t); m=strlen(s); n=strlen(t); for(j=0;j=’A’&&s[m-j-1]<=’F’) s[m-j-1]=s[m-j-1]-‘A’+10; else if(s[m-j-1]>=‘0’&&s[m-j-1]<=‘9’) s[m-j-1]=s[m-j-1]-‘0’; } for(j=0;j=’A’&&t[n-j-1]<=’F’) t[n-j-1]=t[n-j-1]-‘A’+10; else if(t[n-j-1]>=‘0’&&t[n-j-1]<=‘9’) t[n-j-1]=t[n-j-1]-‘0’; } for(j=0;j<m&&jn) for(j=n;j<m;j++) { q[j]=p[(s[m-j-1]+z)%16]; z=(s[m-j-1]+z)/16; } else if(m0&&m!=n) q[j]=p[z]; else if(z>0&&m==n) q[n]=p[z]; printf(“case #%d:\n”,i); i++; k=strlen(q); for(j=1;j<=k;j++) printf(“%c”,q[k-j]); printf(“\n”); } return 0; } [em:13]
高精度加法,改成%16而已
using namespace std; typedef vector BIG; int T;
BIG create(const string& strs) { BIG ret; int ll=strs.length(); for(int i=ll-1;i>=0;i–) { int xx; if(isdigit(strs[i])) xx=strs[i]-‘0’; else xx=strs[i]-‘A’+10; ret.push_back(xx); } return ret; }
BIG operator+(const BIG& aa,const BIG& bb) { BIG ret; for(int i=0;ibb.size()) for(int i=bb.size();i<aa.size();i++) ret.push_back(aa[i]); else for(int i=aa.size();i<bb.size();i++) ret.push_back(bb[i]); for(int i=0;i<aa.size()-1;i++) { ret[i+1]+=ret[i]/16; ret[i]%=16; }
while(ret.back()>=16) { ret.push_back(ret.back()/16); ret[ret.size()-2]%=16; } return ret; }
void print(const BIG& xx) { for(int i=xx.size()-1;i>=0;i–) if(xx[i]>=10) putchar(‘A’+xx[i]-10); else cout<<xx[i]; cout<<endl; return; }
void solve() { string aa,bb; cin>>aa>>bb; BIG xx=create(aa),yy=create(bb); BIG zz=xx+yy; print(zz); return; } int main() { scanf(“%d”,&T); for(int step=0;step<T;step++) { printf(“case #%d:\n”,step); solve(); } return 0; }
用Python作弊…
T = int(input())
i = 0
while i < T:
print(“case #%d:” % i)
a_s, b_s = input().split()
a = int(a_s, 16)
b = int(b_s, 16)
print(“%x”.upper() % (a + b))
i += 1
优雅优雅
注意0+0=0这一组数据
有没有完整的测试数据啊。
求测试案例
[em:02]
瑞哥送答案来啦
include
include
include
int main()
{
int n,i=0,m,v,j,k,z;
char s[205],t[205],p[16]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,’A’,’B’,’C’,’D’,’E’,’F’},q[205];
scanf(“%d”,&v);
getchar();
while(v-i)
{
memset(s,0,sizeof(s));
memset(t,0,sizeof(t));
memset(q,0,sizeof(q));
m=0;
n=0;
z=0;
scanf(“%s %s”,s,t);
m=strlen(s);
n=strlen(t);
for(j=0;j=’A’&&s[m-j-1]<=’F’)
s[m-j-1]=s[m-j-1]-‘A’+10;
else if(s[m-j-1]>=‘0’&&s[m-j-1]<=‘9’)
s[m-j-1]=s[m-j-1]-‘0’;
}
for(j=0;j=’A’&&t[n-j-1]<=’F’)
t[n-j-1]=t[n-j-1]-‘A’+10;
else if(t[n-j-1]>=‘0’&&t[n-j-1]<=‘9’)
t[n-j-1]=t[n-j-1]-‘0’;
}
for(j=0;j<m&&jn)
for(j=n;j<m;j++)
{
q[j]=p[(s[m-j-1]+z)%16];
z=(s[m-j-1]+z)/16;
}
else if(m0&&m!=n) q[j]=p[z]; else if(z>0&&m==n)
q[n]=p[z];
printf(“case #%d:\n”,i);
i++;
k=strlen(q);
for(j=1;j<=k;j++)
printf(“%c”,q[k-j]);
printf(“\n”);
}
return 0;
}
[em:13]
高精度加法,改成%16而已
include
using namespace std;
typedef vector BIG;
int T;
BIG create(const string& strs)
{
BIG ret;
int ll=strs.length();
for(int i=ll-1;i>=0;i–)
{
int xx;
if(isdigit(strs[i])) xx=strs[i]-‘0’;
else xx=strs[i]-‘A’+10;
ret.push_back(xx);
}
return ret;
}
BIG operator+(const BIG& aa,const BIG& bb)
{
BIG ret;
for(int i=0;ibb.size())
for(int i=bb.size();i<aa.size();i++) ret.push_back(aa[i]);
else
for(int i=aa.size();i<bb.size();i++) ret.push_back(bb[i]);
for(int i=0;i<aa.size()-1;i++)
{
ret[i+1]+=ret[i]/16;
ret[i]%=16;
}
while(ret.back()>=16)
{
ret.push_back(ret.back()/16);
ret[ret.size()-2]%=16;
}
return ret;
}
void print(const BIG& xx)
{
for(int i=xx.size()-1;i>=0;i–)
if(xx[i]>=10) putchar(‘A’+xx[i]-10);
else cout<<xx[i];
cout<<endl;
return;
}
void solve()
{
string aa,bb;
cin>>aa>>bb;
BIG xx=create(aa),yy=create(bb);
BIG zz=xx+yy;
print(zz);
return;
}
int main()
{
scanf(“%d”,&T);
for(int step=0;step<T;step++)
{
printf(“case #%d:\n”,step);
solve();
}
return 0;
}