算法基础篇——高精度运算

小学生运算
计算两个整数在相加时需要多少次进位。
多次测试,直到读到两个数是 0 0;
样例输入:
123 456
555 555
123 594
0 0
样例输出:
0
3
1

#include<iostream>
using namespace std;
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)==2)
{
if(!a&&!b) return;
int c=0,ans=0;
for(int i=9;i>=0;i--)
{
c=(a%10+b%10+c)>9?1:0;
ans+=c;
a/=10; b/=10;
}
cout<<ans;
}
return 0;
}

阶乘的精确值

输入不超过1000的正整数n,输出n!=1234…*n的精确结果
样例输入:30
样例输出:265252859812191058636308480000000

分析:1000!大约有4*10的2567次方,需要一个3000个元素的数组f保存
考虑进位,我们倒序存储,令f[0]保存个位,f[1]保存十位…

#include<iostream>
#include<string>
const int maxn=3000;
int f[max];
int main()
{
int i,j,n;
cin>>n;
memset(f,0,sizeof(f));
f[0]=1;
for(i=2;i<=n;i++)
{
int c=0;
for(j=0;j<maxn;j++)
{
int s=f[j]*i+c;
f[i]=s%10;
c=s/10;
}
}
for(j=maxn-1;j>=0;j--)   if(f[j])break;     *//忽略前导0   本题可不考虑*
for(i=j;i>=0;i--) cout<<f[i];
cout<<endl;
return 0;
}
发布了22 篇原创文章 · 获赞 33 · 访问量 1084

猜你喜欢

转载自blog.csdn.net/qq_42577542/article/details/89226714