首页 > 试题广场 >

在使用cc++或java等语言编程时,如果两个较大的整数进

[问答题]
在使用c/c++或java等语言编程时,如果两个较大的整数进行加法操作,可能会导致溢出问题,请用c/c++或java编写程序,实现大整数相加功能。(假设两个大整数不超过1000位。)
(注:不能使用本地IDE)

#include<iostream>
using namespace std;
string s1,s2;
int a[201],b[202],c[202];

void strtoint(string s,int arr[]) 
{
    for(int i=0;i<s.size();i++)
    {
        //012345
        //678---3
        // 876---3-i
        arr[s.size()-i]=s[i]-'0';
    }
    
}

int main()
{
    cin>>s1>>s2;
    //反转 
    strtoint(s1,a);
    strtoint(s2,b);
    //相加
    int lc=max(s1.size(),s2.size())+1; 
    for(int i=1;i<=lc;i++){
        c[i]=a[i]+b[i]+c[i];
        //进位
        c[i+1]=c[i]/10;
        c[i]=c[i]%10; 
    }
    //去前导0
    while(c[lc]==0&&lc>1) lc--;
    
    for(int i=1;i<=lc;i++)
        cout<<c[i];
    
    return 0;
}
发表于 2024-08-26 19:59:33 回复(0)


#include <iostream>

#include <string>

#include <cmath>


using namespace std;


const int N=1007;


string Sum(string a,string b)

{

    int sum[N],int_a[N]={0},int_b[N]={0};

    string temp;

    int n=(int)a.size(),m=(int)b.size(),maxn=0;

    maxn=max(n,m);

    for(int i=n-1;i>=0;i--) int_a[n-i-1]=a[i]-'0';

    for(int i=m-1;i>=0;i--) int_b[m-i-1]=b[i]-'0';

    int res=0;

    for(int i=0;i<=maxn;i++)

    {

        sum[i]=(int_a[i]+int_b[i]+res)%10;

        res=(int_a[i]+int_b[i]+res)/10;

    }

    bool on_enter=0;

    for(int i=maxn;i>=0;i--)

    {

        if(sum[i])

            on_enter=1;

        if(on_enter)

        {

            temp+=sum[i]+'0';

            //cout<<sum[i]<<endl;

        }

    }

    return temp.size()?temp:"0";

}


int main()

{

    string str1,str2;

    cin>>str1>>str2;

    cout<<Sum(str1,str2);

    return 0;

}



编辑于 2019-04-13 17:26:39 回复(0)