您的位置:首页 > 编程语言 > C语言/C++

高精度数取余(C\C++)

2017-10-23 13:40 134 查看
高精度数是OJ题目中最主要的一类题

数组去模拟高精度数是目前最常用的方法

除此之外,还可以通过使用string去模拟也是可以的

取余,是高精度数中主要的一个算法。

这里主要展示自己的高精度数取余的一个操作函数

算法思路:

模拟数学中关于除法,和余数的定义,根据竖式表达式运算得到

PS:注意点是,temp部分是必须的,避免更改原来的数据,所以不能使用

a[i] += flag;操作

int Chu_left(int n){
int flag = 0,temp = 0;
for (int i = 0; i < size; ++i){
flag *= 10;
temp = a[i] + flag;
flag = temp % n;
}
return flag;
}


高精度数,附有取余操作的代码如下:

struct Num{
int *a;
int size;
Num(){
a = new int[100];
size = 0;
}
Num(string &s){
a = new int[s.size()];
size = 0;
for (int i = 0; i < s.size(); ++i){
a[i] = s[i] - '0';
}
size = s.size();
}
int Chu_left(int n){
int flag = 0,temp = 0;
for (int i = 0; i < size; ++i){
flag *= 10;
temp = a[i] + flag;
flag = temp % n;
}
return flag;
}
~Num(){
delete[] a;
}
};


加上main函数部分,就可以做出SOJ1020题

int main(){
int time, array_size, array[100], ans_array[100];
cin >> time;
while (time--) {
cin >> array_size;
for (int i = 0; i < array_size; ++i){
cin >> array[i];
}
string num;
cin >> num;
Num n(num);
cout<< "(";
for (int i = 0; i < array_size; ++i){
cout << n.Chu_left(array[i]);
if (i != array_size-1){
cout << ",";
} else {
cout << ")\n";
}
}
}
}


欢迎关注我用于做笔记的公众号:肥宅Sean笔记

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: