码迷,mamicode.com
首页 > 其他好文 > 详细

高精度小数加法

时间:2017-11-14 22:26:46      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:const   href   name   处理   bsp   color   i++   printf   targe   

例题链接:hdu1753    http://acm.hdu.edu.cn/showproblem.php?pid=1753

代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int maxn = 500;
char a[maxn];
char b[maxn];

int aa1[maxn];
int aa2[maxn];
int bb1[maxn];
int bb2[maxn];
int ansx[maxn];
int ansz[maxn];
int main()
{

    while(~scanf("%s%s",&a,&b))
    {

        memset(aa1 , 0 , sizeof(aa1));
        memset(aa2 , 0 , sizeof(aa2));
        memset(bb1 , 0 , sizeof(bb1));
        memset(bb2 , 0 , sizeof(bb2));
        memset(ansx , 0 ,sizeof(ansx));//小数的答案数组
        memset(ansz , 0 ,sizeof(ansz));//整数的答案数组

        int lena, lenb;
        int i,j;
        ///处理串a
        int ta = lena = strlen(a);
        for(i = 0; i < lena ; i++)
        {
            if(a[i] == .)
            {
                ta = i;
                break;
            }
        }
        ///整数逆存存放, 比如 1 2 3 存为 3 2 1
        for(i = ta - 1; i >= 0; i--)
        {
            aa1[ta - i - 1] = a[i] - 0;
        }

        ///小数正序存放 ,比如 4 5 6 存为 4 5 6

        j = 0;
        for(i = ta + 1; i < lena ; i++)
        {
            aa2[j++] = a[i] - 0;
        }

        ///处理串b
        int tb = lenb = strlen(b);
        for(i = 0; i < lenb ; i++)
        {
            if(b[i] == .)
            {
                tb = i;
                break;
            }
        }
        ///整数逆存存放, 比如 1 2 3 存为 3 2 1
        for(i = tb - 1; i >= 0; i--)
        {
            bb1[tb - i - 1] = b[i] - 0;
        }

        ///小数正序存放 ,比如 4 5 6 存为 4 5 6
        j = 0;
        for(i = tb + 1; i < lenb ; i++)
        {
            bb2[j++] = b[i] - 0;
        }


        ///ADD

        ///小数
        int lenaa2 = lena - ta;
        int lenbb2 = lenb - tb;

        int lenx = lenaa2 > lenbb2 ? lenaa2 : lenbb2;
        int jinwei = 0;
        for(i = lenx - 1; i >= 0 ; i--)
        {
            ansx[i] = (aa2[i] + bb2[i] + jinwei)%10;
            jinwei  = (aa2[i] + bb2[i] + jinwei)/10;
        }

        int lenz = ta > tb ? ta : tb;

        for(i = 0; i <= lenz ; i++)
        {
            ansz[i] = (aa1[i] + bb1[i] + jinwei)%10;
            jinwei  = (aa1[i] + bb1[i] + jinwei)/10;
        }

        if(ansz[lenz] > 0)
            lenz++;
        for(i = lenz - 1; i >= 0; i--)
        {
            printf("%d",ansz[i]);
        }

        while(ansx[lenx - 1] == 0)
        {
            if(ansx[lenx - 1] == 0)
            {
                lenx--;
            }
        }

        if(lenx > 0)
            printf(".");

        for(i = 0; i < lenx ; i++)
        {
            printf("%d",ansx[i]);
        }
        printf("\n");
    }
    return 0;
}

 

高精度小数加法

标签:const   href   name   处理   bsp   color   i++   printf   targe   

原文地址:http://www.cnblogs.com/hhkobeww/p/7834710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!