【算法笔记】B1017 A除以B

1017 A除以B (20 分)
 

本题要求计算 A/B ,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式:

输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式:

在一行中依次输出 Q 和 R,中间以 1 空格分隔。

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

codes:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 struct num{
 5     int d[1010];
 6     int len;
 7     num(){
 8         memset(d, 0, sizeof(d));
 9         len = 0;
10     }
11 };
12 //先保存数的低位,以便除的时候去掉高位的0
13 num change(string s){
14     num a;
15     a.len = s.size();
16     for(int i = 0; i < a.len; i++){
17         a.d[i] = s[a.len - i - 1] - '0';
18     }
19     return a;
20 }
21 num divide(num a, int b, int& r){
22     num c;
23     c.len = a.len;
24     for(int i = a.len - 1; i>=0; i--){
25         r = r * 10 + a.d[i];
26         if(r < b) c.d[i] = 0;//不够除商0
27         else{
28             c.d[i] = r / b;
29             r = r % b;
30         } 
31     }
32     //去掉高位的0,只需要长度减小,实际没有删除
33     while(c.len - 1 >= 1 && c.d[c.len - 1] == 0){
34         c.len--;
35     }
36     return c;
37 }
38 void print(num n){
39     for(int i = n.len - 1; i >= 0; i--){
40         cout<<n.d[i];
41     }
42 }
43 int main(){
44     string str1, str2;
45     int b, r = 0;
46     cin>>str1>>b;
47     num a = change(str1);
48     print(divide(a, b, r));
49     cout<<" "<<r;
50     return 0;
51 }

猜你喜欢

转载自www.cnblogs.com/chunlinn/p/10627766.html