zoukankan      html  css  js  c++  java
  • 九度OJ1198 a+b 【高精度整数】

    题目地址:http://ac.jobdu.com/problem.php?pid=1198

    题目描述:

    实现一个加法器,使其能够输出a+b的值。

    输入:

    输入包括两个数a和b,其中a和b的位数不超过1000位。

    输出:

    可能有多组测试数据,对于每组数据,
    输出a+b的值。

    样例输入:
    2 6
    10000000000000000000 10000000000000000000000000000000
    样例输出:
    8
    10000000000010000000000000000000
    来源:
    2010年华中科技大学计算机研究生机试真题
    #include <stdio.h>
    #include <string.h>
     
    typedef struct biginteger{
        int digit[1000];
        int size;
    }BigInteger;
     
    void StrToInt (char str[], BigInteger * big){
        int len = strlen (str);
        int a, b, c, d, i, j;
        i = 0;
        while (len >= 4){
            a = str[len - 4] - '0';
            b = str[len - 3] - '0';
            c = str[len - 2] - '0';
            d = str[len - 1] - '0';
            big->digit[i] = a * 1000 + b * 100 + c * 10 + d;
            len -= 4;
            ++i;
        }
        if (len > 0){
            big->digit[i] = 0;
            for (j=0; j<len; ++j){
                big->digit[i] = big->digit[i] * 10 + str[j] - '0';
            }
            ++i;
        }
        big->size = i;
    }
     
    void Add (BigInteger * a, BigInteger * b){
        int carry = 0;
        int sum = 0;
        int len = (a->size > b->size) ? a->size : b->size;
        int i;
        for (i=0; i<len; ++i){
            sum = a->digit[i] + b->digit[i] + carry;
            carry = sum / 10000;
            a->digit[i] = sum % 10000;
        }
        if (carry > 0){
            a->digit[i] = carry;
            a->size = i + 1;
        }
        else{
            if (a->size < b->size)
                a->size = b->size;
        }
    }
     
    int main(void){
        BigInteger a, b;
        char str1[1001], str2[1001];
        int index;
     
        while (scanf ("%s%s", str1, str2) != EOF){
            memset (a.digit, 0, sizeof(a.digit));
            memset (b.digit, 0, sizeof(b.digit));
            a.size = b.size = 0;
            StrToInt (str1, &a);
            StrToInt (str2, &b);
            Add (&a, &b);
            index = a.size - 1;
            printf ("%d", a.digit[index]);
            --index;
            while (index >= 0){
                printf ("%04d", a.digit[index]);
                --index;
            }
            putchar ('
    ');
        }
     
        return 0;
    }


  • 相关阅读:
    交叉编译环境软件搭建
    (C)struct结构体
    (C)字节对齐#pragma pack()
    常用bluetooth协议
    (C/C++)register关键字
    Android学习
    (C)*p++和*++p区别
    java文件末尾追加内容的两种方式
    java1.7集合源码阅读: Stack
    java1.7集合源码阅读: Vector
  • 原文地址:https://www.cnblogs.com/liushaobo/p/4373783.html
Copyright © 2011-2022 走看看