您的位置:首页 > 其它

Sicily 1020 Big Integer(高精度运算)

2010-07-12 02:47 513 查看
//高精度取模运算
//一开始套了个原先自己写的模板,高精度%高精度,结果TLE 2次,原因很明显,被除数可达400位,2E除以2就要做1E次减法必定TLE
//所以只能自己写个最原始最朴素的才能过,考虑到除数最大是1000
//因此可以自己写一个string%int型的取模函数,这样速度会快很多,而且很简短
//改用char和scanf应该可以更快
#include<iostream>
#include<string>
using namespace std;
int mod(string dividend,int divisor)
{
int p = 0;//对被除数的位数的指针
int temp = dividend[p++] - '0';
while(1)
{
while(temp < divisor)
{
if(p == dividend.size())	return temp;//如果指针超过被除数最低位还不能找到比除数小的数跳出,此时temp为答案
temp = temp * 10 + dividend[p++] - '0';
}
temp %= divisor;
}
}
int main()
{
int t,n,b[102];
string num;
cin >> t;
while(t--)
{
cin >> n;
for(int i = 0;i < n;++i)	cin >> b[i];
cin >> num;
cout << "(";
for(int i = 0;i < n;++i)
{
cout << mod(num,b[i]);
if(i != n - 1)	cout <<",";
}
cout << ")" << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: