首页 > 其他分享 >大整数求和

大整数求和

时间:2022-11-16 21:11:39浏览次数:46  
标签:求和 sum bl al 整数 int carry size


*/
* Copyright (c) 2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名:text.cpp
* 作者:常轩
* 微信公众号:Worldhello
* 完成日期:2016年9月8日
* 版本号:V1.0
* 程序输入:两个长度不限的整数
* 程序输出:见运行结果
*/

/*
分析:
因为是大整数,所以直接放弃定义int型的变量。可以考虑以字符串的形式输入
。然后再从后往前将每一个字符串的字符给剥离出来,转换成整型,在同位置的相加
加完后再判断是否需要进位,当然需要之前先声明一个变量存储是否进位。
*/
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;

int main()
{
string a,b;
int *sum; //因为不确定和的位数,所以定义int型指针比较好,感觉别扭的话可以想象成一维数组
int i,al,bl; //al、bl在循环遍历时,和a,b字符串的长度有关
cout<<"请输入两个整数,以空格相隔:"<<endl;
cin>>a>>b;
string temp;
if(a.size()>b.size())
{
temp=a;
a=b;
b=temp;
}

//上面的if语句可以确定在运算时保证b是长的字符串,可以减少下面的代码量

sum=new int[b.size()+1]; //分配内存(长度)
sum[0]=0;
char ac,bc;
int carry=0; //记录进位
int sizeDif=b.size()-a.size(); //记录两字符串位数差
int count;
for (al=a.size()-1,bl=b.size()-1;al>=0;al--,bl--)
{

ac=a[al];
bc=b[bl];

int m,n;
m=ac-'0';
n=bc-'0';
sum[bl+1]=m+n+carry;
carry=0;
if(sum[bl+1]>9)
{
carry=1;
sum[bl+1]-=10;
}
}
for(i=sizeDif-1;i>=0;i--)
{
bc=b[i];
sum[i+1]=bc-'0'+carry;
carry=0;
if(sum[i+1]>9)
{
carry=1;
sum[i+1]-=10;
}
}

if(carry==1) //考虑到可能会有结果比b的长度还多一位,则将进的那一位即‘1’先输出
{
cout<<'1';
}
else
{
cout<<" ";
}
for(i=1;i<=b.size();i++)
cout<<sum[i];
cout<<endl;

return 0;
}


标签:求和,sum,bl,al,整数,int,carry,size
From: https://blog.51cto.com/u_15311571/5857657

相关文章