大整数加法
#include<iostream>
#include <cstring>
using namespace std;
char s1[1005], s2[1005];
int n1[1005], n2[1005], ans[1005];
int main() {
cin >> s1 >> s2;
n1[0] = strlen(s1);
n2[0] = strlen(s2);
for (int i = 0, j = n1[0]; i < n1[0]; i++, j--) {
n1[j] = s1[i] - '0';
}
for (int i = 0, j = n2[0]; i < n2[0]; i++, j--) {
n2[j] = s2[i] - '0';
}
ans[0] = max(n1[0], n2[0]);
for (int i = 1; i <= ans[0]; i++) {
ans[i] = n1[i] + n2[i];
}
for (int i = 1; i <= ans[0]; i++) {
if (ans[i] >= 10) {
ans[i] %= 10;
ans[i + 1]++;
if(i == ans[0]) {
ans[0]++;
}
}
}
for (int i = ans[0]; i > 0; i--) {
cout << ans[i];
}
cout << endl;
return 0;
}
大整数乘法
#include <iostream>
#include <cstring>
using namespace std;
char s1[1005], s2[1005];
int n1[1005], n2[1005], ans[2005];
int main() {
cin >> s1 >> s2;
n1[0] = strlen(s1), n2[0] = strlen(s2);
for (int i = 0, j = n1[0]; i < n1[0]; i++, j--) {
n1[j] = s1[i] - '0';
}
for (int i = 0, j = n2[0]; i < n2[0]; i++, j--) {
n2[j] = s2[i] - '0';
}
ans[0] = n1[0] + n2[0] - 1;
for (int i = 1; i <= n1[0]; i++) {
for (int j = 1; j <= n2[0]; j++) {
ans[i + j - 1] += n1[i] * n2[j];
}
}
for (int i = 1; i <= ans[0]; i++) {
if (ans[i] > 9) {
ans[i + 1] += ans[i] / 10;
ans[i] = ans[i] % 10;
if (i == ans[0]) {
ans[0]++;
}
}
}
for (int i = ans[0]; i > 0; i--) {
cout << ans[i];
}
cout << endl;
return 0;
}
均分纸牌
输出
输出一个整数表示所有堆均达到相等时的最少移动次数。
样例输入
4
9 8 17 6
样例输出
3
#include<iostream>
using namespace std;
int num[105], n, sum, avg, ans;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> num[i];
sum += num[i];
}
avg = sum / n;
for (int i = 1; i <= n; i++) {
if (num[i] != avg) {
ans++;
num[i + 1] += num[i] - avg;
num[i] = avg;
}
}
cout << ans << endl;
return 0;
}
数字三角形
样例输入1
6
3
9 5
4 2 1
3 4 9 6
3 5 3 7 3
2 1 3 9 3 2
样例输出1
39
#include<iostream>
using namespace std;
int num[1005][1005], ans[1005][1005], fin;
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for(int j = 1; j <= i; j++) {
cin >> num[i][j];
}
}
for (int i = 1; i < n; i++) {
for (int j = 1; j <= i; j++) {
ans[i][j] = max(ans[i - 1][j], ans[i - 1][j - 1]) + num[i][j];
fin = max(ans[i][j], fin);
}
}
cout << fin << endl;
return 0;
}