高精度
2023-07-25 16:09:37
发布于:河北
CP003168.高精度A+B
string a,b;
cin>>a>>b;
把两个整数当做字符串
加法
string addition(string a,string b){
string c(max(a.size(),b.size())+1,0); //额外多一位防止进位
//i是a数字最后一位的下标,j是b数字最后一位的下标,k是答案的最后一位
int i =a.size() - 1, j = b.size()-1,k = c.size() - 1;
for(;i>=0 | j>= 0 ;i--,j--,k--){
//a的末尾往前,b的末尾往前,c答案末尾往前
int sum = c[k]; //可能之前进位到k这个答案中
if(i >= 0)sum += a[i] - '0'; //将自我转为整数累加到sum中
if(j >= 0)sum += b[j] - '0'; //将字符转为整数累加到sum中
if(sum>=10){ //判断进位
c[k-1]=1; //高位进1,标记为1
c[k] = sum-10; //该位-1的答案
}else c[k] = sum; //没法进位
}
for(int i = 0;i<c.size();i++){ //把所有的答案全部转换为字符数字
c[i]+='0';
}
while(c.size()>1&&c.front()=='0')c.erase(c.begin());
return c; //返回两个整数的答案
}
复制干嘛?愣着呀!点我答题
完整代码
#include <bits/stdc++.h>
using namespace std;
string addition(string a,string b){
string c(max(a.size(),b.size())+1,0); //额外多一位防止进位
//i是a数字最后一位的下标,j是b数字最后一位的下标,k是答案的最后一位
int i =a.size() - 1, j = b.size()-1,k = c.size() - 1;
for(;i>=0 | j>= 0 ;i--,j--,k--){
//a的末尾往前,b的末尾往前,c答案末尾往前
int sum = c[k]; //可能之前进位到k这个答案中
if(i >= 0)sum += a[i] - '0'; //将自我转为整数累加到sum中
if(j >= 0)sum += b[j] - '0'; //将字符转为整数累加到sum中
if(sum>=10){ //判断进位
c[k-1]=1; //高位进1,标记为1
c[k] = sum-10; //该位-1的答案
}else c[k] = sum; //没法进位
}
for(int i = 0;i<c.size();i++){ //把所有的答案全部转换为字符数字
c[i]+='0';
}
while(c.size()>1&&c.front()=='0')c.erase(c.begin());
return c; //返回两个整数的答案
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string a,b;
cin>>a>>b;
cout<<addition(a,b);
return 0;
}
全部评论 1
白嫖力,感谢
2023-07-25 来自 河北
1
有帮助,赞一个