日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

万进制——蓝桥杯|ACM 大数阶乘——21行代码AC

發布時間:2024/2/28 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 万进制——蓝桥杯|ACM 大数阶乘——21行代码AC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

淺談進制思想:

日常生活中我們習慣用十進制去運算;
為了方便電腦識別開發出了二進制,又因為2^3=8 , 2^4=16,因此應運而生了八進制與16進制。
世上本沒有路,走的人多了,也便成了路,那么既然二進制可以衍生出8,16進制,為什么十進制不可以呢。
因此聰明的人們開發出了萬進制,也就是10^4=10000 模仿二進制與十六進制的運算。漸漸的,我們發現萬進制在進行大數運算方面有著無可比擬的優勢。
如:662343889 * 5 = 3311719445
那么如果用萬進制計算:可以設一個數組a[3]; a[2] = 3889 ; a[1] = 6234 ; a[0] = 6 ;
第一步:a[2] * 5 = 19445 ; 19445 %10000 = 1余9445 9445留下,1進位;
第二步:a[1] * 5 = 31170 ; 31170 %10000 = 3余1170 1170留下,加上進位的1為1171(終值),3進位;
第三步:a[0] * 5 = 30 ; 30+3(進位)為終值。
按順序輸出得:3311719945 ;僅僅三步我們便得出了最后結果,如果用十進制呢?每位相加,對于本例,至少要十步吧。效率快了3倍不止。

注意點:

本題 嚴格 模擬手算,相當于簡化版的乘法。
1、本題用萬能頭文件代替#include<iostream>和#include<iomanip>。
傳送門→萬能頭文件
2、萬進制逢萬進一,效率極高,日后做ACM也是非常優秀的代碼。

代碼:

#include<bits/stdc++.h> using namespace std; void factorial(int n) {int a[3000]; a[0] = 1;int places = 0, carry, i, j; //place是當前總位數 , carry是進位 for(int i = 1; i <= n; i++) {carry = 0; for(j = 0; j <= places; j++) { //核心代碼 a[j] = a[j]*i + carry; carry = a[j]/10000; a[j]%=10000; }if(carry > 0) { places++; a[places] = carry; } //進位操作 }cout << a[places];for(i = (places-1); i >= 0; i--) //輸出cout << setw(4) << setfill('0') << a[i]; //填充0 } int main() {int n; cin >> n; factorial(n);return 0; }

總結

以上是生活随笔為你收集整理的万进制——蓝桥杯|ACM 大数阶乘——21行代码AC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。