最近在杭电的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: