高精度
1. 高精度求n的阶乘(ni)
题解:
#include<bits/stdc++.h>
#define MAX 1000000+5
using namespace std;
int a[MAX];
int main()
{
int n;
scanf("%d",&n);
int carry,cnt = 0;
a[0] = 1;//别忘记初始化
for(int i = 2; i <= n; ++i){
carry = 0;
for(int j = 0; j <= cnt; ++j){
a[j] = a[j]*i+carry; // 模拟 手算每次 先乘 后加上进位(而不是加上进位后乘)
carry = a[j]/10000;
a[j] %= 10000;
}
if(carry)//注意 如果 最后有进位的情况
a[++cnt] = carry;
}
//输出要注意每组是4位(最高的一组单独处理) 其余的需要考虑0的情况输出
printf("%d",a[cnt]);
for(int i = cnt-1; i >= 0; --i){
printf("%04d",a[i]);
}
return 0;
}
https://blog.csdn.net/Tianweidadada/article/details/80034492
A/B的高精度值(ab)
#include<stdio.h>
int main()
{
int a,b,i,j,t,c[21];
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
printf("%d/%d=%d.",a,b,a/b);
for(i=0;i<20;i++)
{
a=(a%b)*10; // 除法运算基本公式
c[i]=a/b;
}
while(i--)if(c[i])break; // 保证后面不为零
printf("%d",c[0]); // 至少保留一个零
for(j=