高精度加法:
#include<math.h>
#include<algorithm>
#include<time.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<map>
#include<list>
#include<string>
#include<queue>
#include<set>
#include<vector>
#include<stack>
#include<limits>
#define re register
#define iosgo() std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define run(i,n) for (int i = 1; i <= n; i++)
#define cin std::cin
#define cout std::cout
#define ll long long
#define endl "\n"
using namespace std;
typedef pair<int, int>pll;
const int N = 2e5 + 10;
pll c[N];
int h[150][150];
int x[N], y[N], dp[5055][5055], ss[N];
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
ll a[N];
int n;
signed main()
{
int n; cin >> n;
dp[1][1] = 1, dp[2][1] = 2;
int right = 1;
for (int i = 3; i <= n; i++)
{
for (int j = 1; j <= right; j++)
{
dp[i][j] = dp[i - 1][j] + dp[i - 2][j];
}
for (int j = 1; j <= right; j++)
{
if (dp[i][j] >= 10)
{
dp[i][j + 1] += dp[i][j] / 10;
dp[i][j] %= 10;
if (dp[i][right + 1])right++;
}
}
}
for (int i = right; i >= 1; i--)
{
cout << dp[n][i] ;
}
return 0;
}
高精度乘法:
#include<math.h>
#include<algorithm>
#include<time.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<map>
#include<list>
#include<string>
#include<queue>
#include<set>
#include<vector>
#include<stack>
#include<limits>
#define re register
#define iosgo() std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define run(i,n) for (int i = 1; i <= n; i++)
#define cin std::cin
#define cout std::cout
#define ll long long
#define endl "\n"
using namespace std;
typedef pair<int, int>pll;
const int N = 2e6 + 10;
pll c[N];
int h[150][150];
int x[N], y[N], dp[N], ss[N];
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
signed main()
{
string a;
cin >> a;
string b;
cin >> b;
if (a[0] == '0' || b[0] == '0')
{
cout << "0\n"; return 0;
}
int lena = a.length();
int lenb = b.length();
for (int i = 0; i < lena; i++)
{
x[i] = a[i] - '0';
}
for (int i = 0; i < lenb; i++)
{
y[i] = b[i] - '0';
}
int len = lena + lenb - 1;
int r = 0;
while (r < lenb)
{
for (int i = r, j = 0; i < lena + r; i++, j++)
{
ss[i] += x[j] * y[r];
}
r++;
}
for (int i = len; i > 0; i--)
{
if (ss[i] >= 10)
{
ss[i - 1] += ss[i] / 10;
ss[i] %= 10;
}
}
for (int i = 0; i < len; i++)
{
cout << ss[i];
}
}
高精度保留小数位:
#include<stdio.h>
int main()
{
int a, b, c,sum=0,d;
scanf("%d%d", &a, &b);
for (int i = 0; i < a; i++)
{
scanf("%d", &c);
sum += c;
}
printf("%d.", sum / a);
for (int i = 0; i < b; i++)
{
d = sum % a;
d *= 10;
sum = d;
d /= a;
printf("%d", d);
}
}