zoukankan      html  css  js  c++  java
  • 大整数求和

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

  • 相关阅读:
    微信小程序左右滚动公告栏效果
    返回当前页面title、url等操作
    打开URL操作
    打开浏览器操作
    Java for selenium(webdriver) 环境搭建
    HTMLTestRunner 自动化测试报告
    Python特殊语法:filter、map、reduce、lambda [转]
    抽象类
    __str__
    WebTable 扩展
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232140.html
Copyright © 2011-2022 走看看