1. 程式人生 > >模擬除法和取餘運算(hdu acm 2114&2117)

模擬除法和取餘運算(hdu acm 2114&2117)

最近在杭電的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;
}