(c/c++)超大整数相加

本文介绍了一种使用字符串和数组实现的超大整数相加算法,通过比较两个整数的长度并补齐较短的整数,然后逐位进行加法运算,并正确处理进位问题。

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

超大整数相加,一般来说给的样例都是超过了int型范围,这个时候我们可以用数组或者栈来解答,下面的程序用的便是数组的方法。





#include <iostream>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<cmath>//这里有些头文件可以不用加,因为这些是我试了好几个方法加的,下面只展示一个方法
using namespace std;
int main()
{
	string str1;
	string str2;
	int i,j;
	cin >> str1;
	cin >> str2;
	int h=str1.size();
	int k=str2.size();
	
	//这里我想的是对比两个数组的长度,短的那个从头添零,直到两个数组长度一样
	if(h>k)
	{
		char c='0';
		str2.insert(0,h-k,c);
		//cout<<str2; 整个程序我在很多地方都像这里做了测试,看输出结果是否是我想要的
	}
	if(k>h)
	{
	    char c='0';
		str1.insert(0,k-h,c);
		//cout<<str1;
	}
	int d=str1.size();
	int e=str2.size();
		
	//cout<<d<<" "<<e;} 
	
	//cout<<h<<" "<<k;}
	//到此为止都可以运行 
	
	string str3(d+1,'0');
	
	//cout<<str3;}//测试 输入1111 11 输出00000 
	
	
	
	while (d!=0&&e!=0)//从尾部逐个相加str1和str2 ,只有d,e均为0时停下 
	{
	   
       int a=(int)(str1[d-1]-'0'); //强制转换
       int b=(int)(str2[e-1]-'0');
       str3[d]=str3[d]+a+b;
       //cout<<str3[d];exit(0);}}
	   if((a+b)>9)
	   {
	   	   str3[d]=str3[d]-10;
	   	   str3[d-1]+=1;
	   	   //cout<<str3[d]<<" "<<str3[d-1];exit(0);
	   }  //}} 
	   
	   //cout<<str3[d];

	   d--;
	   e--;
	   //cout<<str3[d];
    }
   //cout<<str3;}    //几个样例测试 55 5  060/555 5 0560/111 1 0112
	
	//这里要再次声明d,e,不然它们的值会跟着while中的走
    d=str1.size();
    e=str2.size();
    
    
    //逐个输出结果  
    //int c=(int)(str3[0]-48);//cout<<c;}  //c=0 ->测试 
    if (str3[0]==48)
    {
    		for(i=1;i<=d;i++)
    	{
    		cout<<str3[i];
    	}
    }
    else 
    {
    	for(i=0;i<=d;i++)
    	{
    		cout<<str3[i];
    	}
    }
	

这个程序我觉得主要的难点在进位问题上,解决了这个问题,再注意一下细节,就基本没问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值