奇怪的加法(满十不进位) 长沙理工大学2018校赛 B题

链接: https://www.nowcoder.com/acm/contest/97/B
来源:牛客网

奇怪的加法
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

zhrt是数学大佬,但有一天一道奇怪的数学题把他难住了:题目要求计算两个十进制数相加后的结果,但在本题中是不需要进位的!
  现在zhrt弯下他的小蛮腰向你请教,你能帮帮他吗?

输入描述:

输入有多组(组数不超过1000),每组占一行,每行有2个正整数A和B。(A,B<=1e9)

输出描述:

每组输出占一行,输出题目中A和B相加的结果。
示例1

输入

123 321
999 1
99 11

输出

444
990
0

#include<iostream>
#include<vector>
#include<map>
#include<queue>
#include<stack>
 
using namespace std;
int main(){
     int a,b,sum=0;
     while (cin>>a>>b){
         vector< int > t;
         while (a||b){
             t.push_back((a+b)%10);
             a/=10;
             b/=10;
         }
         int i=t.size()-1;
         while (t[i]==0&&i>0)i--;
         for (;i>=0;i--){
             cout<<t[i];
         }
         cout<<endl;
     }
     return 0;
}


#include <iostream>
#include <string.h>
#include <cstdio>
#include <bits/stdc++.h>
 
using namespace std;
 
int main(){
     char a[15],b[15],c[15];
     char d;
     while (~ scanf ( "%c" ,&d)){
         int f=1,n=0;
         memset (a,0, sizeof (a));
         memset (b,0, sizeof (b));
         memset (c,0, sizeof (c));
 
         scanf ( "%s" ,a);
         for ( int i= strlen (a); i>0; i--){
             a[i]=a[i-1];
         }
         a[0]=d;
 
         cin>>b;
         getchar ();
 
         int lena= strlen (a),lenb= strlen (b);
 
         if (lena>=lenb){
             int dis=lena-lenb;
             for ( int i=lenb-1; i>=0; i--){
                 a[i+dis]=a[i+dis]+b[i]- '0' ;
                 if (a[i+dis]> '9' ) a[i+dis]-=10;
             }
 
             for ( int i=0; i<lena; i++){
                 if (a[i]== '0' && f) n++;
                 else f=0;
             }
 
             for ( int i=n; i<lena; i++)
                 printf ( "%c" ,a[i]);
 
             if (n==lena) printf ( "0" );
         }
         else {
             if (lenb>=lena){
             int dis=lenb-lena;
             for ( int i=lena-1; i>=0; i--){
                 b[i+dis]=b[i+dis]+a[i]- '0' ;
                 if (b[i+dis]> '9' ) b[i+dis]-=10;
             }
 
             for ( int i=0; i<lenb; i++){
                 if (a[i]== '0' && f) n++;
                 else f=0;
             }
 
             for ( int i=n; i<lenb; i++)
                 printf ( "%c" ,b[i]);
 
             if (n==lenb) printf ( "0" );
             }
         }
         printf ( "\n" );
     }
     return 0;
}


#include<cstdio>
#include<cstring>
int main()
{
     char a[20],b[20]; int s[20];
     while ( scanf ( "%s%s" ,a,b)!=-1)
     {
         int alen= strlen (a),blen= strlen (b);
         int cnt=0;
         alen--;blen--;
         while (alen>=0&&blen>=0)
             s[cnt++]=((a[alen--]- '0' )+(b[blen--]- '0' ))%10;
         while (alen>=0) s[cnt++]=a[alen--]- '0' ;
         while (blen>=0) s[cnt++]=b[blen--]- '0' ;
         int flag=0;
         for ( int i=cnt-1;i>=0;i--)
         {
             if (!flag&&!s[i]) continue ;
             else { printf ( "%d" ,s[i]);flag=1;}
         }
         if (!flag) printf ( "0" );
         printf ( "\n" );
     }
     return 0;
}



#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
typedef long long LL;
typedef long long ll;
int main(){
     int a,b,c;
     while ( scanf ( "%d%d" ,&a,&b)!=EOF){
         int c = 0;
         int t = 1;
         do {
             c += t*((a%10+b%10)%10);
             a/=10;
             b/=10;
             t*=10;
             
         } while (!(a==0&&b==0));
         printf ( "%d\n" ,c);  
         
         
     }
}



#include <bits/stdc++.h>
using namespace std;
 
int main()
{
     int a, b;
     while (cin >> a >> b)
     {
         int ans = 0, t = 1;
         for (; a || b; a /= 10, b /= 10, t *= 10)
             ans += ((a % 10 + b % 10) % 10) * t;
         cout << ans << endl;
     }
}


#include <bits/stdc++.h>
using namespace std;
 
int s, a, b;
 
int main(){
     while (~ scanf ( "%d %d" , &a, &b)){
         int s = 0;
         int p = 1;
         while (a > 0 || b > 0){
             s = (a % 10 + b % 10) % 10 * p + s;
             p *= 10;
             a /= 10;
             b /= 10;
         }
         printf ( "%d\n" , s);
     }
     return 0;
}


#include <bits/stdc++.h>
using namespace std;
int main(){
     int a,b,ans;
     while (cin>>a>>b){
         ans=0;
         for ( int i=1;;i*=10){
             int aa=a%10,bb=b%10;
             a/=10;b/=10;
             ans=(aa+bb)%10*i+ans;
             if (a<=0&&b<=0) break ;
         }
         cout<<ans<<endl;
     }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值