字符串相加/大数相加(代码极短)
生活随笔
收集整理的這篇文章主要介紹了
字符串相加/大数相加(代码极短)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和。
思路:
我們定義兩個指針 i 和 j 分別指向 num 1 和num 2 的末尾,即最低位,同時定義一個變量add 維護當前是否有進位,然后從末尾到開頭逐位相加即可。你可能會想兩個數字位數不同怎么處理,這里我們統一在指針當前下標處于負數的時候返回 0,等價于對位數較短的數字進行了補零操作。
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; //進位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中的函數,使用時需要在.c文件中include<math.h>
作用是返回兩個浮點參數中較大的一個
總結
以上是生活随笔為你收集整理的字符串相加/大数相加(代码极短)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 还不知道要看什么小说嘛?爬取小说网站前1
- 下一篇: 最长回文串