Sicily 1201 01000001(高精度运算)

//二进制高精度运算 #include<iostream> #include<cstring> #include<algorithm> struct BinaryNum//高精度结构体 { char num[100]; int data[100]; int len; void reverse()//逆序转换 { for(int i = 0;i < len;++i) { data[i] = num[len - i - 1] - '0'; } } void print() //打印结果 { int nonzero; for(int i = len;i >= 0;--i)//去除前导零 { if(data[i] != 0) { nonzero = i; break; } } for(int i = nonzero;i >= 0;--i) { printf("%d",data[i]); } printf("/n"); } }a,b,ans; int max(int a,int b) { return a > b ? a : b; } void Plus(BinaryNum a,BinaryNum b) { ans.len = max(a.len,b.len); for(int i = 0;i <= ans.len;++i) { ans.data[i] = 0; } for(int i = 0;i < ans.len;++i) { ans.data[i] += a.data[i] + b.data[i]; ans.data[i+1] += ans.data[i]/2; ans.data[i] %= 2; } } int main() { //freopen("in.txt","r",stdin); int n,t = 0; scanf("%d",&n); while(n--) { memset(a.data,0,sizeof(BinaryNum)); memset(b.data,0,sizeof(BinaryNum)); memset(ans.data,0,sizeof(BinaryNum)); scanf("%s%s",a.num,b.num); a.len = strlen(a.num); b.len = strlen(b.num); a.reverse(); b.reverse(); Plus(a,b); printf("%d ",++t); ans.print(); } return 0; } 

你可能感兴趣的:(Sicily 1201 01000001(高精度运算))