/*
题意:
1、高精度除法
A是不超过1000的整数,B是一位数,所以你需要输出商和余数R
解题:
1、结构体
2、逆着赋值
3、打印大整数
4、除法实现
learn && wrong:
1、memset函数在cstring和iostream都有
2、记不住呀divide,整整有8个模块
*/
#include <iostream>
#include <cstring>
using namespace std;
//结构体
struct bign {
int d[1001];
int len;
bign(){
memset(d,0,sizeof(d));
len = 0;
}
};
//转换成bign
bign change(char str[]){
bign c;
c.len = strlen(str);
for(int i = 0;i < c.len;++i){
c.d[i] = str[c.len - i - 1] - '0';
}
return c;
}
//打印函数
void print(bign a){
for(int i = a.len - 1;i >= 0;--i){
cout<<a.d[i];
}
}
bign divide(bign a,int b,int &r){
bign c;
c.len = a.len;
for(int i = a.len - 1;i >= 0;--i){
r = r * 10 + a.d[i];
if(r < b) c.d[i] = 0;
else{
c.d[i] = r / b;
r = r % b ;
}
}
while(c.len - 1 >= 1 && c.d[c.len - 1] == 0){
c.len--;
}
return c;
}
int main(int argc, char** argv) {
char str[1001];
int b;
cin>>str>>b;
int r = 0;
bign a = change(str); //转为大整数
bign c = divide(a,b,r); //除法
print(c);
cout<<" "<<r;
return 0;
}
网友评论