poj 2845 01000001

高精度模拟
#include <stdio.h>
#include 
<string.h>

int n;
char num1[100], num2[100],num[100];

void turn(char *str, int len)
{
    
int mid=len>>1;
    
char temp;
    
for ( int i= 0; i < mid; i++ )
    {
        temp
= str[i];
        str[i]
=str[len-1-i];
        str[len
-1-i]= temp;
    }
}

int calu(int len1, int len2)
{
    
int max, min;
    
char *str;
    
if (len1 > len2)
    {
        max
=len1;
        min
=len2;
        str
=num1;
    }
    
else
    {
        max
= len2;
        min
= len1;
        str
=num2;
    }
    
int i;
    memset(num, 
0sizeof(num));
    
for ( i = 0 ; i < min; i++ )
    {
        num[i]
+=num1[i]+num2[i];
        
if (num[i]>1)
        {
            num[i
+1]= num[i]/2;
            num[i]
%=2;
        }
    }
    
for ( i = min; i < max; i++ )
    {
        num[i]
+=str[i];
        
if (num[i]>1)
        {
            num[i
+1]= num[i]/2;
            num[i]
%=2;
        }
    }
    
if (num[i]) return i;
    
else
        
for ( i=i-1; i >0; i-- )
            
if (num[i]) return i;
    
return 0;
}

int main()
{
    scanf(
"%d"&n);
    
int l;
    
for ( l = 1 ; l <= n ; l++ )
    {
        scanf(
"%s%s", num1, num2);
        printf(
"%d ", l);
        
int len1= strlen(num1), len2= strlen(num2);
        
int i;
        
for ( i = 0 ; i < len1; i++ )
            num1[i]
-='0';
        
for ( i = 0 ; i < len2; i++ )
            num2[i]
-='0';
        turn(num1, len1);
        turn(num2, len2);
        
int len= calu(len1, len2);
        
for ( i = len ; i >= 0; i-- )
            printf(
"%d", num[i]);
        putchar(
10);
    }
    
return 0;
}

posted on 2011-08-11 00:45 purplest 阅读(254) 评论(0)  编辑 收藏 引用 所属分类: 高精度


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔分类(70)

随笔档案(68)

ACMer

搜索

最新随笔

最新评论