1. 程式人生 > >【華為oj】超長正整數想加

【華為oj】超長正整數想加

問題描述:請設計一個演算法完成兩個超長正整數的加法。
介面說明
 /*
 請設計一個演算法完成兩個超長正整數的加法。
 輸入引數:
 String addend:加數
 String augend:被加數
 返回值:加法結果
 */
 public String AddLongInteger(String addend, String augend)
 {
     /*在這裡實現功能*/
  
  return null;     
 }
知識點:字串 
題目來源:內部整理 
練習階段:初級 
執行時間限制:10Sec
記憶體限制:128MByte
輸入: 
輸入兩個字串數字
 
輸出: 
輸出相加後的結果,string型
 
樣例輸入:99999999999999999999999999999999999999999999999999
1
                   

樣例輸出:100000000000000000000000000000000000000000000000000

問題分析:輸入的是兩個字串數字,要想實現加法運算,必須要轉化成數字陣列(int)型陣列來儲存字串中的每個數字字元(當然儲存的是字元ASCII碼轉化成數字後的int數),然後利用迴圈運算,將兩個陣列相加,注意進位的判斷。

程式碼:

#include <iostream>
#include <string>

using namespace std;
#define N 10000

void longadd(string &,string &);

int main()
{
	string s1,s2;
	getline(cin,s1);
	getline(cin,s2);
	longadd(s1,s2);

	return 0;
}

void longadd(string &s1,string & s2)
{
	int len1=s1.size();
	int len2=s2.size();
	int a[N]={0},b[N]={0};
	//將字串輸入到整型陣列中,低位放在第0位
	int i=0;
	for(i=0;i<len1;i++)
	{
		a[i]=s1[len1-i-1]-'0';//將數字轉換成ASCII碼
	}
	for(i=0;i<len2;i++)
	{
		b[i]=s2[len2-i-1]-'0';
	}
	int len=len1>len2?len1:len2;
	for(i=0;i<len;i++)
	{
		a[i]=a[i]+b[i];
		if(a[i]>=10)
		{
			a[i]=a[i]%10;
			a[i+1]++;
		}
	}
	//如果最高位還有進位
	if(a[len])
	{
		cout<<a[len];
	}
	//其他位輸出
	for(i=len-1;i>=0;i--)
	{
		cout<<a[i];
	}
	cout<<endl;

}