字符串相加/大数相加(代码极短)
生活随笔
收集整理的這篇文章主要介紹了
字符串相加/大数相加(代码极短)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述:
給定兩個字符串形式的非負(fù)整數(shù) num1 和num2 ,計算它們的和。
思路:
我們定義兩個指針 i 和 j 分別指向 num 1 和num 2 的末尾,即最低位,同時定義一個變量add 維護(hù)當(dāng)前是否有進(jìn)位,然后從末尾到開頭逐位相加即可。你可能會想兩個數(shù)字位數(shù)不同怎么處理,這里我們統(tǒng)一在指針當(dāng)前下標(biāo)處于負(fù)數(shù)的時候返回 0,等價于對位數(shù)較短的數(shù)字進(jìn)行了補(bǔ)零操作。
c++ 代碼:
int(string num1, string num2) {int i = num1.size()-1,j = num2.size()-1;int add =0;string ans = "";while(i>=0||j>=0||add!=0){int x = i>=0?num1[i]-'0':0;int y = j>=0?num2[j]-'0':0;int result = x+y+add;ans.push_back('0'+result%10); add=result/ 10; //進(jìn)位i--;j--;}reverse(ans.begin(),ans.end());return ans;}c語言代碼:
char* addStrings(char* num1, char* num2) {int i = strlen(num1) - 1, j = strlen(num2) - 1, add = 0;char* ans = (char*)malloc(sizeof(char) * (fmax(i, j) + 3));int len = 0;while (i >= 0 || j >= 0 || add != 0) {int x = i >= 0 ? num1[i] - '0' : 0;int y = j >= 0 ? num2[j] - '0' : 0;int result = x + y + add;ans[len++] = '0' + result % 10;add = result / 10;i--, j--;}int left = 0,right = len-1;while(left<right){char ch = ans[left];ans[left] = ans[right]ans[right] = ch;left++;right--; }ans[len++] = 0;//字符串末尾添加0return ans; }-fmax :math.h中的函數(shù),使用時需要在.c文件中include<math.h>
作用是返回兩個浮點(diǎn)參數(shù)中較大的一個
總結(jié)
以上是生活随笔為你收集整理的字符串相加/大数相加(代码极短)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 还不知道要看什么小说嘛?爬取小说网站前1
- 下一篇: 最长回文串