超长正整数相加(OJ)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010352111/article/details/65441862

题目

描述

请设计一个算法完成两个超长正整数的加法。

接口说明

 /*
 请设计一个算法完成两个超长正整数的加法。
 输入参数:
 String addend:加数
 String augend:被加数
 返回值:加法结果
 */

 public String AddLongInteger(String addend, String augend)
 {
     /*在这里实现功能*/


  return null;     
 }

输入

输入两个字符串数字

输出

输出相加后的结果,string型

样例输入

99999999999999999999999999999999999999999999999999
1

样例输出

100000000000000000000000000000000000000000000000000

代码

可以用cin

#include <iostream>
#include <cstring>
#define N 10000
using namespace std;
void Longadd(char *s1,char *s2)
{
    int len1=strlen(s1),len2=strlen(s2);
    int a[N]={0},b[N]={0};
    for (int i=0;i<len1;i++)
        a[i]=s1[len1-1-i]-'0';
    for (int i=0;i<len2;i++)
        b[i]=s2[len2-1-i]-'0';
    int len=(len1>len2 ? len1:len2);
    for (int i=0;i<len;i++)
    {
        a[i]+=b[i];
        if (a[i]>=10)
        {
            a[i]=a[i]%10;
            a[i+1]++;
        }
    }
    if (a[len])
        cout<<a[len];
    for (int i=len-1;i>=0;i--)
        cout<<a[i];
    cout<<endl;
}

int main()
{
    char m[100],n[100];
    gets(m);
    gets(n);
    Longadd(m,n);
    return 0;
}

这里写图片描述

展开阅读全文

超长正整数减法,错在哪里???

08-13

哪一步没有考虑到,或者有什么更好的算法???rn望高人指点~~~~rnrnrn/*rn【问题描述】rn编写程序实现两个超长正整数(每个最长80位数字)的减法运算。rn rn【输入形式】rn从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。rn1. 第一行是超长正整数A;rn2. 第二行是超长正整数B;rn rn【输出形式】 rn输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。rn要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。rn 【输入样例】rn rn234098rn134098703578230056rn rn【输出样例】rn -134098703577995958rn【样例说明】rn进行两个正整数减法运算, 234098 -134098703578230056 = -134098703577995958。rn*/rn#include rn#include rnvoid cancel (char s[]);rnvoid reverse (char s[]);rnrnint main()rnrn char a[100]='\0',b[100]='\0',temp[100]='\0';rn int len_a,len_b;rn int i;rn gets(a);rn gets(b);rnrn //去掉数组前面的0rn cancel (a);rn cancel (b);rnrn len_a=strlen(a);rn len_b=strlen(b);rnrn //使前一个数大于后一个数,并输出负号rn if (len_a=b[i])rn if (b[i]==0)rn a[i]=a[i];rn elsern a[i]=a[i]-b[i]+'0';rn rn elsern a[i]=a[i]+10-b[i]+'0';rn a[i+1]=a[i+1]-'1';//▲▲▲这一步好像不太对???▲▲▲rn rn reverse (a);rn cancel (a);rnrn printf ("%s\n",a);rn return 0;rnrnrn//删除数组前面的0rnvoid cancel (char s[])rn int len_s,i,j;rn len_s=strlen(s);rn for (i=0;i 论坛

没有更多推荐了,返回首页