日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符串相加/大数相加(代码极短)

發(fā)布時間:2025/3/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串相加/大数相加(代码极短) 小編覺得挺不錯的,現(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。