描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
思路:利用小学学的加法进位,利用倒叙输入计算
例如:
源码
#include<iostream>
#include<cstring>
#define MAXLEN 10000
using namespace std;
int main(){
int i,up=0,tmp;
char buff[MAXLEN + 1] = { 0 }, a[MAXLEN + 1] = { 0 }, b[MAXLEN + 1] = { 0 };
scanf("%s\n",buff);
tmp = 0;
for (i = strlen(buff) - 1; i >= 0; i--)
a[tmp++] = buff[i] - '0';
scanf("%s", buff);
tmp=0;
for (i = strlen(buff) - 1; i >= 0; i--)
b[tmp++] = buff[i] - '0';
for (i = 0; i<MAXLEN; i++){
tmp = a[i] + b[i] + up;
a[i]=tmp%10;
up = tmp / 10;
}
for (i = MAXLEN; i >= 0; i--)
if (a[i] != 0)
for (i; i >= 0; i--)
printf("%d", a[i]);
return 0;
}
#include<iostream>
#include<cstring>
#define MAXLEN 10000
using namespace std;
int main(){
int i,j,up=0,tmp;
char arr[MAXLEN + 1] = { 0 }; arr[0] = {1 };
int n;
scanf("%d",&n);
for (i = 2; i<=n; i++) {
up=0;
for(j =0;j<=MAXLEN;j++){
tmp = arr[j] *i + up;
arr[j]=tmp%10;
up = tmp / 10;
}
}
for (i = MAXLEN; i >= 0; i--)
if (arr[i] != 0)
for (i; i >= 0; i--)
printf("%d", arr[i]);
return 0;
}
贴一个不错的讲解:B站