您的位置:首页 > 其它

Sicily 1201 01000001(高精度运算)

2010-05-15 01:44 369 查看
//二进制高精度运算
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: