蓝桥杯官网 试题 基础练习 阶乘计算(C++ 高精度)
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯官网 试题 基础练习 阶乘计算(C++ 高精度)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目大意: 輸入一個(gè)正整數(shù)n,輸出n!的值。
? ? ? ? ? ? ? ? ?其中n!=1*2*3*…*n。
解題思路:? ?高精度加法及乘法,使用數(shù)組模擬存儲(chǔ)計(jì)算結(jié)果。
//藍(lán)橋杯試題 基礎(chǔ)練習(xí) 階乘計(jì)算 //高精度 //Writed by Maolin Xiao,2020 03 08 //婦女節(jié)快樂!!! #include<bits/stdc++.h> #define fori(i,a,b) for(int i = a;i < b;i++) #define mod 1000000007 #define ll long long #define pi acos(-1) #define ford(i,a,b) for(int i = a;i >= b;i--) #define fast_input() ios::sync_with_stdio(0) #define INF 0x3f3f3f3f #define maxn 10005 using namespace std;//使用倒敘存儲(chǔ)數(shù)字,方便于加法的實(shí)現(xiàn) typedef struct BigNumber{int len;int value[maxn];void init(){len = 0;memset(value,0,sizeof(value));} }BigNumber;BigNumber Add(BigNumber a,BigNumber b){BigNumber ans;ans.init();int flag = 0;fori(i,0,max(a.len,b.len)){int q = a.value[i] + b.value[i] + flag;if(q >= 10) {flag = 1;q %= 10;}else{flag = 0;}ans.value[ans.len++] = q;}if(flag) ans.value[ans.len++] = flag;return ans; }void Print(BigNumber it){ford(i,it.len - 1,0){printf("%d",it.value[i]);}cout<<endl; }BigNumber mulity(BigNumber a,int t){BigNumber ans;ans.init();while(t){int k = t % 10;fori(i,0,k){ans = Add(ans,a);}t /= 10;a.len++; //a擴(kuò)大十倍 ford(i,a.len - 1,1){a.value[i] = a.value[i - 1];}a.value[0] = 0;}return ans; }int main(){int n;cin>>n;BigNumber a;a.init();a.len = 1;a.value[0] = 1; //a初始化為1 fori(i,2,n + 1){a = mulity(a,i);}Print(a);return 0; }如有問題,歡迎聯(lián)系2339814485(qq).
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯官网 试题 基础练习 阶乘计算(C++ 高精度)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(1874)vue之电商管理系统
- 下一篇: QT播放器布局