zoukankan      html  css  js  c++  java
  • 华为測试 超长整数相加

    请设计一个算法完毕两个超长正整数的加法。

    输入两个字符串数字

    输出相加后的结果。string型

    例子输入:99999999999999999999999999999999999999999999999999

                        1

    例子输出:100000000000000000000000000000000000000000000000000

    #include<iostream>
    #include<string>
    using namespace std;
    string add(string num1,string num2);
    int main()
    {
    	string add1,add2,anser;
    	cin>>add1;
    	cin>>add2;
    	anser=add(add1,add2);
    	cout<<anser<<flush;
    	return 0;
    }
    string add(string add1,string add2)
    {
    	int MaxLen,jia1,jia2,jia,tenbit=0;
    	char temp;
    	string::iterator iter;
    	string::reverse_iterator iter1,iter2;
    	if(add1.size()>=add2.size())
    	{
    		MaxLen=add1.size();
    		iter=add2.begin();
    		add2.insert(iter,MaxLen-add2.size(),'0');
    	}
    	else
    	{
    		MaxLen=add2.size();
    		iter=add1.begin();
    		add1.insert(iter,MaxLen-add1.size(),'0');
    	}
    	 for(iter1=add1.rbegin(),iter2=add2.rbegin();iter1!=add1.rend(),iter2!=add2.rend();++iter1,++iter2)
    	 {
    		 if(iter1==add1.rend()-1 && iter2==add2.rend()-1)//处理最高位相加
    		 {
    			 jia1=*iter1-'0';
    			 jia2=*iter2-'0';
    			 jia=(jia1+jia2+tenbit)%10;
    			 tenbit=(jia1+jia2+tenbit)/10;
    			 *iter1=jia+'0';
    			 if(tenbit>0)//若最高位有进位,向前产生数字1
    				add1.insert(add1.begin(),'1');
    		 }
    		 else
    		 {
    			jia1=*iter1-'0';
    			jia2=*iter2-'0';
    			jia=(jia1+jia2+tenbit)%10;
    			tenbit=(jia1+jia2+tenbit)/10;
    			*iter1=jia+'0';
    		 }
    	 }
    	return add1;
    	
    }


  • 相关阅读:
    【转】Oracle中的decode在mysql中的等价实现
    Perhaps you are running on a JRE rather than a JDK
    iisapp -a命令出现 :此脚本不能与WScript工作
    HDU 6070 线段树
    HDU 1853 MCMF
    Codeforces 7C 扩展欧几里得
    HDU 5675 智慧数
    Lucas 大组合数
    bzoj 2179 FFT
    POJ 1155 树形背包
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5091193.html
Copyright © 2011-2022 走看看