美文网首页
【C/C++】超长正整数的加法

【C/C++】超长正整数的加法

作者: 仍有不归期 | 来源:发表于2020-06-05 12:18 被阅读0次

这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)

【问题描述】
编写程序实现两个超长正整数(每个最长80位数字)的加法运算。

【输入形式】

从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。

  1. 第一行是超长正整数A;
  2. 第二行是超长正整数B;

【输出形式】
输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出。
算法提示:

1.用字符串输入两个超长整数,分别存放在两个字符串中,每一位对应一个字符串中的字符。
2.以较短的超长整数为基准,从低位到高位,对应位转换成数字后相加,再加上前一位相加的进位,得到的和模上10再转换为字符即为当前位,得到的和整除10即为当前位的进位。将计算得到的每一位保存到结果字符数组。
3.将较长字符串的剩余位加上最后一个进位移到结构数组后面。
4.将结果数组反序输出(去掉高位多余的0)。
【输入样例】

134098703578230056
234098

【输出样例】
134098703578464154

【样例说明】
进行两个正整数加法运算,134098703578230056 + 234098 = 134098703578464154。

【评分标准】
完全正确得20分,每个测试点4分,提交程序文件名为add.c。


【代码】

//大数加法 2018/12/3/11:44
//写的一堆垃圾。。。以后再改
#include<stdio.h>
#include<string.h>

int main()
{
    char a[81]={};
    char b[81]={};
    scanf("%s",a);
    getchar();
    
    scanf("%s",b);
    getchar();
    
    int j;
    for(j=0;j<81;j++)
    {
        if(a[j]!='0')
        {
            break;
        }
    }
    int k;
    for(k=0;k<81;k++)
    {
        if(b[k]!='0')
        {
            break;
        }
    }
    char c[81];
    char d[81];
    int i;
    for(i=0;i<81;i++)
    {
        c[i]='0';
        d[i]='0';
    }
    
    
    for(i=0;i<strlen(a);i++)
    {
        c[i]=a[strlen(a)-1-i];
    }
    for(i=0;i<strlen(b);i++)
    {
        d[i]=b[strlen(b)-1-i];
    }
    int final[81]={0};
    
    for(i=0;i<81;i++)
    {
        if((int)c[i]+(int)d[i]+final[i]-96<10)
        {
            final[i]+=(int)c[i]+(int)d[i]-96;
        }
        else
        {
            final[i]+=(int)c[i]+(int)d[i]-58-48;
            final[i+1]=1;
        }
    }
    int save;
    for(i=80;i>=0;i--)
    {
        if(final[i] >0&&final[i]<10 )
        {
            save=i;
            break;
        }
        
    }
    int m;
    if(strlen(a)-j>strlen(b)-k)
    {
        m=strlen(a)-j;
    }
    else
    {
        m=strlen(b)-k;
    }
    if(final[m]!=0)m+=1;
    for(i=m-1;i>=0;i--)
    {
        printf("%d",final[i]);
    }
    
    return 0;
}


PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...

相关文章

  • 【C/C++】超长正整数的加法

    这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)...

  • LeetCode 168.Excel表列名称

    给定一个正整数,返回它在 Excel 表中相对应的列名称。 C++

  • c/c++大整数加法

    刚入门编程语言的同学可能对大整数加法合乘法有点小头疼。在这里就给大家分享下。希望对大家有所帮助。下面进入正题 De...

  • All for PAT秋考 | 1136 - 1139

    涉及知识1136 大整数加法(字符串,这次用了c++ string)1137 筛选分类排序,取整注意+0.5113...

  • 高精度加法(C++实现)

    高精度加法 简介 用于计算含有超过一般变量存放不下的非负整数 高精度加法这个过程是模拟的小学竖式加法计算 步骤 以...

  • C++知识点

    C++基本方法: C++ memcpy C++基本特性: C++引用(vs指针) C++指针 C++封装: 将...

  • 任务列表

    C++ 《C++ primer》、《STL源码解析》、《effective C++》、《深度搜索c++对象模型》 ...

  • C++远征之起航篇

    C++和C语言的联系与区别: C++是C语言发展而来,C语言是C++的子集 C++更高效3.相对于C语言,C++添...

  • 二叉树的遍历(先序、中序、后序)

    树结构: 先序:递归:C++: 非递归:C++: 中序:递归:C++: 非递归:C++: 后序:递归:C++: 非...

  • C++学习笔记目录

    C++初步 C++数据长度 C/C++ 堆 栈 静态 常量 代码 区 static关键字 C++类和对象 C++引...

网友评论

      本文标题:【C/C++】超长正整数的加法

      本文链接:https://www.haomeiwen.com/subject/ezvpzhtx.html