BM86. 大数加法
描述
示例1
输入:
"1","99"
输出:
"100"
说明:
1+99=100示例2
输入:
"114514",""
输出:
"114514"
C++ 解法, 执行用时: 3ms, 内存消耗: 1260KB, 提交时间: 2021-04-03
static const auto io_sync_off = []()//lambda函数 { // turn off sync,关闭输入输出流的缓存 std::ios::sync_with_stdio(false); // untie in/out streams,实现输入和输出流的解绑 std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ string solve(string s, string t) { // write code here int l = s.length(); int r = t.length(); if(!l) return t; if(!r) return s; int carry = 0,tmp = 0; if(l<r){ for(int n=r-l;n>0;n--) s = '0'+s; l=r; }else if(l>r){ for(int n=l-r;n>0;n--) t = '0'+t; l=r; } for(int i=s.size()-1;i>=0;i--){ tmp = s[i]-'0'+t[i]-'0'+carry; if(tmp>=10){ carry = 1; tmp -= 10; }else carry = 0; s[i] = tmp+'0'; } if(carry) s = '1'+s; return s; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 1264KB, 提交时间: 2021-06-03
// class Solution { // public: // /** // * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 // * 计算两个数之和 // * @param s string字符串 表示第一个整数 // * @param t string字符串 表示第二个整数 // * @return string字符串 // */ // string solve(string s, string t) { // // write code here // int a =0,b=0; // int sum = 0; // if(s.size() == 1) // a = s[0]-'0'; // else // { // for(int i = 0;i<s.size();i++) // { // a+=(s[i]-'0')*pow(10, i); // } // } // if(t.size() == 1) // b = t[0]-'0'; // else // { // for(int i = 0;i<t.size();i++) // { // a+=(t[i]-'0')*pow(10, i); // } // } // sum = a+b; // stringstream ss; // ss<<sum; // string summ = ss.str(); // return summ; // } // }; static const auto io_sync_off = []()//lambda函数 { // turn off sync,关闭输入输出流的缓存 std::ios::sync_with_stdio(false); // untie in/out streams,实现输入和输出流的解绑 std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ string solve(string s, string t) { // write code here int l = s.length(); int r = t.length(); if(!l) return t; if(!r) return s; int carry = 0,tmp = 0; if(l<r){ for(int n=r-l;n>0;n--) s = '0'+s; l=r; }else if(l>r){ for(int n=l-r;n>0;n--) t = '0'+t; l=r; } for(int i=s.size()-1;i>=0;i--){ tmp = s[i]-'0'+t[i]-'0'+carry; if(tmp>=10){ carry = 1; tmp -= 10; }else carry = 0; s[i] = tmp+'0'; } if(carry) s = '1'+s; return s; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 1284KB, 提交时间: 2021-02-02
static const auto io_sync_off = []()//lambda函数 { // turn off sync,关闭输入输出流的缓存 std::ios::sync_with_stdio(false); // untie in/out streams,实现输入和输出流的解绑 std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ string solve(string s, string t) { if(s.empty())return t; if(t.empty())return s; if(s.size()<t.size())swap(t, s); int tail=s.size()-t.size(); int carry=0,tmp=0; while(tail--) t='0'+t; for (int i=s.size()-1;i>=0;i--){ tmp=s[i]-'0'+t[i]-'0'+carry; if(tmp>=10){ carry=1; tmp-=10; } else{ carry=0; } s[i]=tmp+'0'; } if (carry==1){ s='1'+s; } return s; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 1484KB, 提交时间: 2021-03-15
static const auto io_sync_off = []()//lambda函数 { // turn off sync,关闭输入输出流的缓存 std::ios::sync_with_stdio(false); // untie in/out streams,实现输入和输出流的解绑 std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ string solve(string s, string t) { if (s.empty()) return t; if (t.empty()) return s; if (s.size() < t.size()) swap(s,t); int tail = s.size()-t.size(); while(tail--) t = '0'+t; int carry=0; int tmp =0; for (int i = s.size()-1; i>=0;i--) { tmp = s[i]- '0' + t[i] - '0' + carry; if (tmp >=10) { carry = 1; tmp -= 10; }else{ carry = 0; } s[i] = tmp + '0'; } if (carry == 1) { s = '1' + s; } return s; } };
Go 解法, 执行用时: 3ms, 内存消耗: 1620KB, 提交时间: 2021-05-23
package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 * @return string字符串 */ func solve( s string , t string ) string { // write code here m := len(s) n := len(t) // let m < n if m > n { m,n = n,m s,t = t,s } ret := make([]byte, n + 1) carry := 0 for i:=0; i< n; i++ { longN := int(t[n-i-1] - '0') shortN := 0 if m-i-1 >= 0 { shortN = int(s[m-i-1] - '0') } result := longN + shortN + carry carry = result / 10 result = result % 10 ret[n-i] = byte(result + '0') } if carry == 1 { ret[0] = '1' return string(ret) } return string(ret[1:]) }