糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

POJ 2389 Bull Math 高精度整数

注意:
要去掉前面的0再输出。


#include <stdio.h>
#include 
<string.h>

struct node {
    
char arr[128];
    
int len;
}
;

__inline 
int max(int a, int b)
{
    
return a > b ? a : b;
}


__inline 
void add(struct node *a, struct node *b)
{
    
int i, val;

    
for (val = i = 0; i < max(a->len, b->len); i++{
        
if (i < a->len)
            val 
+= a->arr[i];
        
if (i < b->len)
            val 
+= b->arr[i];
        a
->arr[i] = val % 10;
        val 
/= 10;
    }

    
if (val)
        a
->arr[i++= val;
    a
->len = i;
}


__inline 
void mul_single(struct node *a, int val, int pad, struct node *c)
{
    
int i, r;

    
for (i = 0; i < pad; i++)
        c
->arr[i] = 0;
    c
->len = pad;
    
for (r = i = 0; i < a->len; i++{
        r 
+= a->arr[i] * val;
        c
->arr[c->len++= r % 10;
        r 
/= 10;
    }

    
if (r)
        c
->arr[c->len++= r;
}


__inline 
void mul(struct node *a, struct node *b, struct node *c)
{
    
struct node t;
    
int i;

    c
->len = 0;
    
for (i = 0; i < a->len; i++{
        mul_single(b, a
->arr[i], i, &t);
        add(c, 
&t);
    }

}


__inline 
void input(struct node *t)
{
    
char str[sizeof(t->arr)];
    
int i, len;

    scanf(
"%s", str);
    len 
= strlen(str);
    t
->len = 0;
    
for (i = len - 1; i >= 0; i--)
        t
->arr[t->len++= str[i] - '0';
}


__inline 
void output(struct node *t)
{
    
int i;

    
for (i = t->len - 1; i >= 0 && !t->arr[i]; i--);
    
if (i < 0{
        printf(
"0\n");
        
return ;
    }

    
for ( ; i >= 0; i--)
        putc(t
->arr[i] + '0', stdout);
    putc(
'\n', stdout);
}


int main()
{
    
struct node a, b, c;

    freopen(
"e:\\test\\in.txt""r", stdin);

    input(
&a);
    input(
&b);
    mul(
&a, &b, &c);
    output(
&c);

    
return 0;
}

posted on 2010-03-14 00:08 糯米 阅读(237) 评论(0)  编辑 收藏 引用 所属分类: POJ


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