题目描述:
输入两个正整数a,b,输出a+b的值。
输入描述:
两行,第一行a,第二行b。a和b的长度均小于1000位。
输出描述:
一行,a+b的值。
输入样例:
4
2
输出样例:
6
解题思路:
将字符串sa、sb分别逆序存入数组a、b中,然后开始相加进位,最后忽略前置0进行输出即可。哈哈哈感觉我写这题的代码好骚啊。
AC代码:
#include <bits/stdc++.h> using namespace std; #define Up(i,a,b) for(int i = a; i <= b; i++) #define ms(a,x) memset(a,x,sizeof(a)) const int maxn = 1006; int a[maxn],b[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); ms(a,0); ms(b,0); string sa,sb; cin >> sa >> sb; int lensa = sa.length()-1; int lensb = sb.length()-1; Up(i,0,lensa) //逆序存入a { a[lensa-i] = sa[i]-'0'; } Up(i,0,lensb) //逆序存入b { b[lensb-i] = sb[i]-'0'; } Up(i,0,maxn-1) //相加、进位 { b[i] += a[i]; if(b[i] >= 10) //进位操作 { b[i+1] += b[i]/10; b[i] %= 10; } } //输出结果 int i = maxn-1; while(i>0 && b[i]==0) //忽略前置0 { i--; } for( ; i >= 0; i--) { cout << b[i]; } cout << endl; return 0; }