您的位置:首页 > 其它

leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)

2015-11-17 14:39 429 查看
https://leetcode.com/problems/multiply-strings/

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
vector<int> na; na.clear();
vector<int> nb; nb.clear();

while(l1) {
na.push_back(l1->val);
l1 = l1->next;
}

while(l2) {
nb.push_back(l2->val);
l2 = l2->next;
}

vector<int> sum(max(na.size(), nb.size()) + 1);
for(int i=0;i<sum.size();++i) sum[i] = 0;

int i=0;
for(;i<min(na.size(), nb.size());++i) sum[i] = na[i] + nb[i];
for(;i<max(na.size(), nb.size());++i) sum[i] = max(na.size(), nb.size())==na.size() ? na[i]: nb[i];

for(int i=0;i<sum.size()-1;++i) {
if(sum[i] >= 10) {
sum[i+1] += sum[i] / 10;
sum[i] = sum[i] % 10;
}
}

if(sum[sum.size()-1] == 0) sum.pop_back();

ListNode *head = new ListNode(-1);
ListNode *r = head, *s;
for(int i=0;i<sum.size();++i) {
s = new ListNode(-1);
s->val = sum[i];
r->next = s;
r = s;
}r->next = NULL;

head = head->next;

return head;
}
};


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: