大整数求和

*/
 * 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;
}

posted @ 2016-09-09 21:28  壹言  阅读(175)  评论(0编辑  收藏  举报