模擬除法和取餘運算(hdu acm 2114&2117)
阿新 • • 發佈:2019-01-24
最近在杭電的ACM上看到了兩道題2116,2117.雖然難度不算太大,卻給了我很大的啟示。除法與取餘運算,這兩種本該在一種運算中的工具。具有不同的意義。
顧名思義,取餘得到的結果,就是被除數除去除數後的結果。這種運算,在處理大數的過程中具有很大的意義。而做模擬整除,就是在不斷重複我們小學時代做除法豎式時的情景,即做除法,得到一個結果,再對得到的餘數乘上10(或者進位制數)再次進行除法。我們慣性的思維總覺得是得到了小數點後的某一位。但是實際上,我們得到的是一個個位上的數,這就是模擬除法。可以得到小數點後任意一位數。
題目的說明:
hdu acm 2114
這道題要求輸出一個很大的數的立方和的後四位數,我們採用long long但在輸出時,對最後的四位取餘數。得到最後的結果。
hdu acm 2117
最後的程式碼:
2114
#include <iomanip> #include<iostream> int main() { using namespace std; long long n,sum; cin >> n; sum=((n*(n+1))%10000/2)*((n*(n+1))%10000/2); cout<<setw(4)<<setfill('0')<<sum; return 0; }
2117:
#include<iostream> #include<stdio.h> int main() { using namespace std; int m,n,result; int temp=10; while(scanf("%d",&n)!=0) { cin >> m; while(m--) { result=temp/n; temp=temp%n*10; } cout << result; } return 0; }