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