本月最后一天
明天就去玩单片机了
昨天看到个带正负号的大数
给出2个大整数A,B,计算A+B的结果。
输入
第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)
输出
输出A + B
输入样例
68932147586
468711654886
输出样例
537643802472
纯当练练码力了
#include<bits/stdc++.h>
using namespace std;
char a[10006],b[10006],c[10006];
int main(){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
cin>>a>>b;
if(a[0]!='-'&&b[0]!='-'){
int lena=strlen(a),lenb=strlen(b);
if(lena<lenb){
swap(a,b);
swap(lena,lenb);
}
reverse(a,a+lena);
reverse(b,b+lenb);
for(int i=0;i<lenb;i++){
c[i]=c[i]+a[i]+b[i]-'0';
if(c[i]>'9'){
c[i]-=10;
c[i+1]++;
}
}
for(int i=lenb;i<lena;i++){
c[i]=c[i]+a[i];
if(c[i]>'9'){
c[i]-=10;
c[i+1]++;
}
}
int len=strlen(c);
if(c[len-1]==1){
c[len-1]+='0';
}
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
}else if(a[0]=='-'&&b[0]=='-'){
int lena=strlen(a),lenb=strlen(b);
if(lena<lenb){
swap(a,b);
swap(lena,lenb);
}
reverse(a+1,a+lena);
reverse(b+1,b+lenb);
for(int i=1;i<lenb;i++){
c[i]=c[i]+a[i]+b[i]-'0';
if(c[i]>'9'){
c[i]-=10;
c[i+1]++;
}
}
for(int i=lenb;i<lena;i++){
c[i]=c[i]+a[i];
if(c[i]>'9'){
c[i]-=10;
c[i+1]++;
}
}
c[0]='-';
int len=strlen(c);
if(c[len-1]==1){
c[len-1]+='0';
}
cout<<"-";
for(int i=len-1;i>=1;i--){
cout<<c[i];
}
}else {
if(a[0]=='-'){
swap(a,b);
}
int lena=strlen(a),lenb=strlen(b);
if(lena<lenb-1){
reverse(a,a+lena);
reverse(b+1,b+lenb);
for(int i=0;i<lena;i++){
c[i]=c[i]+b[i+1]-a[i]+'0';
if(c[i]<'0'){
c[i]+=10;
c[i+1]--;
}
}
for(int i=lena;i<lenb-1;i++){
c[i]=c[i]+b[i+1];
if(c[i]<'0'){
c[i]+=10;
c[i+1]--;
}
}
int len=strlen(c);
while(c[len-1]=='0'){
len--;
}
cout<<"-";
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
}else if(lena>lenb-1){
reverse(a,a+lena);
reverse(b+1,b+lenb);
for(int i=0;i<lenb-1;i++){
c[i]=c[i]+a[i]-b[i+1]+'0';
if(c[i]<'0'){
c[i]+=10;
c[i+1]--;
}
}
for(int i=lenb-1;i<lena;i++){
c[i]=c[i]+a[i];
if(c[i]<'0'){
c[i]+=10;
c[i+1]--;
}
}
int len=strlen(c);
while(c[len-1]=='0'){
len--;
}
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
}else {
int op=strcmp(a,b+1);
reverse(a,a+lena);
reverse(b+1,b+lenb);
if(op==0){
cout<<"0";
}else if(op<0){
for(int i=1;i<lenb;i++){
c[i]=c[i]+b[i]-a[i-1]+'0';
if(c[i]<'0'){
c[i]+=10;
c[i+1]--;
}
}
c[0]='-';
int len=strlen(c);
while(c[len-1]=='0'){
len--;
}
cout<<"-";
for(int i=len-1;i>=1;i--){
cout<<c[i];
}
}else {
for(int i=0;i<lena;i++){
c[i]=c[i]+a[i]-b[i+1]+'0';
if(c[i]<'0'){
c[i]+=10;
c[i+1]--;
}
}
int len=strlen(c);
while(c[len-1]=='0'){
len--;
}
for(int i=len-1;i>=0;i--){
cout<<c[i];
}
}
}
}
return 0;
}
惊了
打了我一个半小时
太难受了
就是要分情况太麻烦了
明儿就开始训练