给定两个正整数(不含前导 00),计算它们的和。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的和。
数据范围
1≤整数长度≤1000001≤整数长度≤100000
输入样例:
12
23
输出样例:
35
_____________________________________________________________________________
真的没有学过但是突发奇想,写了半小时一堆错误。
后面上网搜了一下我的思路,一下搜出一个高精度。
我都佩服我自己。嘿嘿。
快点赞!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_____________________________________________________________________________
没有学但凭自己的方法写的第一份代码:
#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005];
string x,y;
void node(int n){
for(int i=n-1,j=0;i>=0;i--,j++){
a[i]=x[j]-48;
}
}
void node1(int n){
for(int i=n-1,j=0;i>=0;i--,j++){
b[i]=y[j]-48;
}
}
int node2(int n,int m){
int i;
int len=min(n,m);
for(i=0;i<len;i++){
int cnt=c[i]+a[i]+b[i];
if(cnt>9){
c[i+1]=1;
c[i]=cnt%10;
}
else{
c[i]=cnt;
}
}
for(i=i;i<max(n,m);i++){
c[i]+=max(a[i],b[i]);
if(c[i]>9){
c[i+1]=1;
c[i]=c[i]%10;
}
}
return i;
}
int main(){
cin>>x>>y;
node(x.size());
node1(y.size());
int Len=node2(x.size(),y.size());
if(c[Len]==1){
printf("%d",c[Len]);
}
for(int i=Len-1;i>=0;i--){
printf("%d",c[i]);
}
}
改进后:
#include <bits/stdc++.h>
using namespace std;
int a[100005],b[100005],c[100005];
string x,y;
void node(int n,int m){对每一位进行相加
int i,len=min(n,m);
for(i=0;i<len;i++){
if(c[i]+a[i]+b[i]>9){判断进不进位
c[i+1]=1;c[i]=(c[i]+a[i]+b[i])%10;
}
else c[i]=c[i]+a[i]+b[i];
}
for(i=i;i<max(n,m);i++){把大的那个数没有用到的数加上去。
c[i]+=max(a[i],b[i]);
if(c[i]>9)c[i+1]=1;c[i]=c[i]%10;
}
}
int main(){
cin>>x>>y;把输入的两个数变成字符串。
int n=x.size(),m=y.size(),Len=max(n,m);
再分别把两个数的每一位用数组来倒序存
for(int i=n-1,j=0;i>=0;i--,j++){a[i]=x[j]-48;}
for(int i=m-1,j=0;i>=0;i--,j++){b[i]=y[j]-48;}
node(n,m);
if(c[Len]!=1)printf("%d",c[Len]);判断是否增加了一位
for(int i=Len-1;i>=0;i--){
printf("%d",c[i]);
}
}