1017 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

 

 

    这道题目并不难,输入的数据用string型变量存放,计算的时候只需要把字符转换为对应的整形即可。注意在除的时候,是要分情况的,

首先看够不够除,够除的话还要看有没有余数?然后就是不够出的话,就要借位了;而且有的时候还不能借位,所以要考虑到所有可能的

情况。

    下面附上代码,代码中注释了一些比较容易忽略的测试数据,可以测试一下

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 using namespace std;
 5 int main()
 6 {
 7     string A;
 8     vector<int> Q;
 9     short B=0,R,q,tem;
10     cin>>A>>B;
11     R=0;  //初始化余数为0
12     for(unsigned int i=0;i<A.length();)
13     {
14         if((A[i]-'0')>=B&&R==0) //够除,并且上一次做除法是整除,余0
15         {
16             R=(A[i]-'0')%B;  //取余数
17             q=(A[i]-'0')/B;  //取商
18             Q.push_back(q);
19             i++;
20         }
21         else if((A[i]-'0')<B&&R==0) //不够除,就借一位,并且上一次做除法是整除,余0
22         {
23             if(i+1<A.length())  //借位的时候,判断有没有越界;如A=70、B=7或A=6、B=7,此时借位会越界
24             {
25                 Q.push_back(0);  //不够除,商零
26                 tem=(A[i]-'0')*10+(A[i+1]-'0');
27                 R=tem%B;
28                 q=tem/B;
29                 Q.push_back(q);
30                 i+=2;
31             }
32             else  //如A=70、B=7或A=6、B=7,不能借位,直接取商取余输出并结束
33             {
34                 if(i==0) //A=6、B=7
35                 {
36                     cout<<(A[i]-'0')/B<<" "<<(A[i]-'0')%B;
37                     return 0;
38                 }
39                 if(i-1>=0) //A=70、B=7或A=71、B=7
40                 {
41                     Q.push_back(0);
42                     R=(A[i]-'0')%B;
43                     break;
44                 }
45             }
46         }
47         else  //上一次没有整除,有余数
48         {
49             tem=R*10+(A[i]-'0');
50             R=tem%B;
51             q=tem/B;
52             Q.push_back(q);
53             i++;
54         }
55     }
56     for(unsigned int i=0;i<Q.size();i++ )
57     {
58         if(i==0&&Q[i]==0)
59             continue;
60         cout<<Q[i];
61     }
62     cout<<" "<<R;
63     return 0;
64 }

ac了

 

posted @ 2020-05-01 12:19  和运气碰碰  阅读(169)  评论(0编辑  收藏  举报