HDOJ 1753 大明A+B

本文介绍了一种解决任意长度正小数加法的方法。通过读取输入的两个正小数,并进行逐位相加处理,最终输出最简结果。特别注意小数点的位置及进位操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
 

 

Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
 

 

Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
 

 

Sample Input
1.1 2.9 1.1111111111 2.3444323343 1 1.1
 

 

Sample Output
4 3.4555434454 2.1
这道题有点小麻烦,交了好几次wa   很多小陷阱  注意考虑全面啊。。。。
View Code
#include<stdio.h>
#include<string.h>
int main()
{
    int a[420], b[420], c[900];
    int len1, len2, x, y, i, j, k, x1, y1, flag;
    char str1[420], str2[420],u,v;
    while(scanf("%s%c%s%c",str1,&u,str2,&v) != EOF)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        len1 = strlen(str1);
        len2 = strlen(str2);
        flag=0;//flag的作用通过x = len1;y = len2;实现
        for(i = 0; i < len1; i++)
        {
            if(str1[i] >= '0' && str1[i] <= '9')
            a[i]=str1[i] - '0';
            else
            {
                x = i;
                flag = 1;
            }
        }
        if(flag == 0)
        {
            x = len1;
        }

        flag = 0;
        for(i = 0; i < len2; i++)
        {
            if(str2[i] >= '0' && str2[i] <= '9')
            b[i] = str2[i]-'0';
            else
            {
                y = i;
                flag = 1;
            }
        }
        //寻找小数点位置并转化字符串
        if(flag == 0)
        {
             y = len2;
        }

        if(len1-x > len2-y)
        {
            x1 = len1 - 1;
            y1 = y + len1 - x - 1;
            j = 450 + len1 - x - 1;
        }
        else
        {
            x1 = x + len2 - y - 1;
            y1 = len2 - 1;
            j = 450 + len2 - y - 1;
        }
        if(j < 450)
        j = 450//j必须大于450,否则其小数部分为0;
        k = j;
        for(;x1 > x; x1--,y1--)
        {
           c[k] += a[x1] + b[y1];
            if(c[k] > 9)
            {
                if(k==451)
                    c[k-2]++;//小数位向整数位进一位时
                else
                    c[k-1]++;
                c[k] -= 10;
            }
            k--;
        }
        //先处理小数部分
        k=449;
        for(x1 = x-1, y1 = y-1; x1 >= 0||y1 >= 0; x1--,y1--)
        {
            c[k] += a[x1] + b[y1];
            if(c[k] > 9)
            {
                c[k-1]++;
                c[k] -= 10;
            }
            k--;
        }
        //后处理整数部分
        for(i = 0; i <= 449; i++)
        {
            if(c[i] != 0)
            break;
        }
        if(i == 450)
            printf("0");//整数为0时
        else
            for(; i <= 449; i++)
                printf("%d",c[i]);

        for(k = j; k >= 451; k--)
        if(c[k] != 0)
        break;
        if(k == 450)
        printf("\n");//小数为0时,无小数点
        else
        {
            printf(".");
            for(i = 451; i <= k; i++)
            printf("%d",c[i]);//输出小数
            printf("\n");
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/wanglin2011/archive/2012/07/25/2607987.html

资源下载链接为: https://pan.quark.cn/s/d37d4dbee12c A:计算机视觉,作为人工智能领域的关键分支,致力于赋予计算机系统 “看懂” 世界的能力,从图像、视频等视觉数据中提取有用信息并据此决策。 其发展历程颇为漫长。早期图像处理技术为其奠基,后续逐步探索三维信息提取,与人工智能结合,又经历数学理论深化、机器学习兴起,直至当下深度学习引领浪潮。如今,图像生成和合成技术不断发展,让计算机视觉更深入人们的日常生活。 计算机视觉综合了图像处理、机器学习、模式识别和深度学习等技术。深度学习兴起后,卷积神经网络成为核心工具,能自动提炼复杂图像特征。它的工作流程,首先是图像获取,用相机等设备捕获视觉信息并数字化;接着进行预处理,通过滤波、去噪等操作提升图像质量;然后进入关键的特征提取和描述环节,提炼图像关键信息;之后利用这些信息训练模型,学习视觉模式和规律;最终用于模式识别、分类、对象检测等实际应用。 在实际应用中,计算机视觉用途极为广泛。在安防领域,能进行人脸识别、目标跟踪,保障公共安全;在自动驾驶领域,帮助车辆识别道路、行人、交通标志,实现安全行驶;在医疗领域,辅助医生分析医学影像,进行疾病诊断;在工业领域,用于产品质量检测、机器人操作引导等。 不过,计算机视觉发展也面临挑战。比如图像生成技术带来深度伪造风险,虚假图像和视频可能误导大众、扰乱秩序。为此,各界积极研究检测技术,以应对这一问题。随着技术持续进步,计算机视觉有望在更多领域发挥更大作用,进一步改变人们的生活和工作方式 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值