zoukankan      html  css  js  c++  java
  • 大整数相加

    /*功能:完成来个大整数的相加*/
    /*
    解题思路:
    读入俩个大整数,将他们分别放在俩个字符串中,申明第三个字符串用来保存结果。
    从俩个字符串的末位开始相加,若大于10则向前进一位,他们的模数作为该位的结果,若不大于10,直接将该数做为结果,
    其中涉及到字符和数字转化的技巧,具体实现请看代码。
    */
    #include <iostream>
    #include <string>
    #include <stdlib.h>
    using namespace std;
    int main()
    {
    	string str1,str2,tem;
    	int len1,len2,i,j,n;
    	cout<<endl<<"      *******************该程序完成俩个大整数的相加***********************"<<endl;
    	cout<<"输入第一个大整数:\n";
    	cin>>str1;
    	cout<<"输入第二个大整数:\n";
    	cin>>str2;
    	//分别求出俩个大整数的长度
    	len1=str1.size();
    	len2=str2.size();
    	//将位数高的字符串放到str1中,将位数低的字符串放到str2中
    	if(len1<len2)
    	{
    		tem=str1;
    		str1=str2;
    		str2=tem;
    		i=len1;
    		len1=len2;
    		len2=i;
    	}
    	//k中保存来至低位的进位,开始的时候应该为0
    	int k=0;
    	//str3中保存相加后的结果,将str3申明为最大数字位数加2,其中最后一位用来作为标志位,保存的是'\0',以便读取的时候不会越界
    	//俩个n位的数字位相加,其结果不会超过n*10=10n,即不会超过n+1位,所以用余下的n+1位来保存相加后的结果
    	char *str3 = new char[len1+2];
    	//将str3中的内容清零
    	memset(str3,0,len1+2);
    	//该for循环实现了逐位相加的效果,注意循环的条件
    	for(i=len1-1,j=len2-1;i>-1 && j>-1;i--,j--)
    	{
    		//将字符转化为数字判断n的大小
    		n=(str1[i]-'0')+(str2[j]-'0')+k;
    		if(n<10)
    		{
    			//将数字再次转化为字符保存在str3中
    			str3[i+1]=n+'0';
    			k=0;
    		}
    		else
    		{
    			str3[i+1]=n%10+'0';
    			k=n/10;
    		}
    	}
    	//位数少的字符可能已经完成运算,但是位数多的字符串可能还存在没有运算的位数,while就是解决这个问题的
    	while(i>-1)
    	{
    		n=str1[i]-'0'+k;
    		if(n<10)
    		{
    			str3[i+1]=n+'0';
    			k=0;
    		}
    		else
    		{
    			str3[i+1]=n%10+'0';
    			k=n/10;
    		}
    		i--;
    	}
    	//在最后一次要将来自低位的进位加到str3中
    	str3[i+1]=k+'0';
    	//以下功能是为打印服务的,若前几位是字符0,则不打印
    	i=0;
    	while(str3[i]=='0')
    	{
    		str3++;
    		i++;
    	}
    	cout<<"运算结果为:"<<str3<<endl;
    	return 0;
    }


  • 相关阅读:
    微信小程序
    微信小程序
    微信小程序
    微信小程序
    es5
    es5
    es5||es6
    es5
    5 个常用的软件质量指标
    Solr
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3001563.html
Copyright © 2011-2022 走看看