LintCode 655. 大整數加法
阿新 • • 發佈:2018-01-29
return rtl 字符 n-n pos clas max 位與 -s
以字符串的形式給出兩個非負整數 num1
和 num2
,返回 num1
和 num2
的和。
給定 num1 = "123"
,num2 = "45"
返回 "168"
class Solution { public: /* * @param num1: a non-negative integers * @param num2: a non-negative integers * @return: return sum of num1 and num2 */ string addStrings(string &num1, string&num2) { // write your code here int longLen=max(num1.size(),num2.size()); int shortLen=min(num1.size(),num2.size()); string n1=num1.size()==longLen?num1:num2;//長度較長的串 string n2=num2.size()==shortLen?num2:num1;//長度較短的串 int diffLen=longLen-shortLen;int x=0;//進位 for(int i=shortLen-1;i>=0;i--)//從兩個串的末尾開始運算,運算shortLen位 { n1[i+diffLen]=n1[i+diffLen]+n2[i]+x-‘0‘-‘0‘; x=n1[i+diffLen]/10;//保存進位 n1[i+diffLen]=n1[i+diffLen]%10+‘0‘; } //剩余的部分與進位處理 //如189+2,先處理9+2 然後在以下運算處理進位與前面18的加法運算 for(int j=longLen-shortLen-1;j>=0;j--) { if(x==0) break; n1[j]=n1[j]+x-‘0‘; x=n1[j]/10;//保存進位 n1[j]=n1[j]%10+‘0‘; } if(x>0) return ‘1‘+n1; else return n1; } };
LintCode 655. 大整數加法