大数题目
43.Multiply Strings Note: The length of both num1 and num2 is < 110. 思路: 假设是一个n位数与m位数相乘,则相乘的最大值为(10^n-1)*(10^m-1) 即10^(n+m)-10^n-10^m+1,显然最大值至多n+m位数 class Solution {
public:
string multiply(string num1,string num2) {
string sum(num1.size()+num2.size(),'0');
for(int i=num1.size()-1;0<=i;--i)
{
int carry=0;
for(int j=num2.size()-1;0<=j;--j)
{
int tmp=(sum[i+j+1]-'0')+(num1[i]-'0')*(num2[j]-'0')+carry;
sum[i+j+1]=tmp%10+'0';
carry=tmp/10;
}
sum[i]+=carry;
}
size_t x=sum.find_first_not_of("0");
if( string::npos!=x)
{
return sum.substr(x);
}
return "0" ;
}
};
415 Add Strings class Solution {
public:
string addStrings(string num1,string num2) {
if (num1.size() < num2.size()) return addStrings(num2,num1);
int carry = 0,i = num1.size() - 1,j = num2.size() - 1;
for (; i >= 0 && (carry || j >= 0); i--,j--,carry /= 10)
num1[i] = (carry += num1[i] - '0' + (j >= 0 ? num2[j] - '0' : 0)) % 10 + '0';
return (carry ? "1" : "") + num1;
}
};
class Solution {
public:
string addStrings(string num1,string num2) {
int i=num1.size()-1;
int j=num2.size()-1;
string res("");
int carry=0;
while( i>=0 || j>=0 || carry)
{
long sum=0;
if(i>=0) {sum += (num1[i]-'0');--i;}
if(j>=0) {sum += (num2[j]-'0');--j;}
sum+=carry;
carry=sum/10;
res=res+to_string(sum%10);
}
reverse(res.begin(),res.end());
return res;
}
};
66.Plus One class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
vector<int> res;
int carry=1;
int i=digits.size()-1;
if(i<0)
{
return vector<int>(1,1);
}
do
{
int tmp=digits[i]+carry;
res.push_back(tmp%10);
carry=tmp/10;
--i;
}while(i>=0);
if(carry)
{
res.push_back(carry);
}
reverse(res.begin(),res.end());
return res;
}
};
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |