PAT乙级1017. A除以B(20)
来源:互联网 发布:怎么在淘宝上开S音速店 编辑:程序博客网 时间:2024/06/05 02:32
1017. A除以B(20)
本题要求计算A / B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
分析:由于被除数的数据过大,用int或者long int肯定是不行的。因此我们可以用字符串来保存A。
我们可以通过模拟笔算的过程来一位一位的求商。
下图是我拿1234除以7当作栗子。
红色表示当前正在处理哪一位,Q是商数组,A是被除数数组。
每次算出一位商(下图的左边),都要调整当前位的被除数(下图的右边),为下一位的除法作准备。
最后输出商的时候还要注意关于开头0的问题,如果开头是0的话就把0跳过,不过前提是这个商不是1位数,否则开头的0就不必跳过
#include<iostream>#include<string>using namespace std;int main(){string a;//a是被除数的字符串形式int A[1000], B, Q[1000], R;//A,B,Q,R分别代表被除数,除数,商,余数cin >> a >> B;int i;for (i = 0; i < a.length(); i++)//把被除数从字符串形式转化为int形式A[i] = a[i] - 48;Q[0] = A[0] / B;//先求出商的第一位A[0] -= B*Q[0];//再更新下一步的被除数for (i = 1; i < a.length(); i++){Q[i] = (A[i - 1] * 10 + A[i]) / B;//算出商从左往右数第i位A[i] = ((A[i - 1] * 10 + A[i]) - B*Q[i]) % 10;//更新被除数的第i位}R = A[a.length() - 1];//余数就是最后更新完成后的被除数的个位if (Q[0]||a.length()==1)//只有商的第一位不是0才输出,但是如果商只有一位的话那么还是要输出0cout << Q[0];for (i = 1; i < a.length(); i++)//输出商的其余位cout << Q[i];cout << " " << R;//输出余数}
阅读全文
0 0
- PAT-乙级-1017. A除以B (20)
- PAT乙级.1017. A除以B (20)
- PAT乙级 1017. A除以B (20)
- 1017. A除以B (20) PAT乙级
- PAT乙级1017. A除以B (20)
- 1017. A除以B (20)--PAT乙级
- PAT乙级 1017. A除以B (20)
- PAT乙级1017. A除以B (20)
- PAT 乙级 1017. A除以B (20)
- [PAT乙级]1017. A除以B (20)
- pat 乙级 1017. A除以B (20)
- 1017. A除以B (20)--PAT乙级
- PAT乙级1017. A除以B(20)
- PAT乙级 1017. A除以B
- PAT 乙级 1017. A除以B
- PAT(乙级)1017. A除以B
- PAT乙级:1017. A除以B (C)
- [PAT-乙级]1017.A除以B
- 数据算法之瞎扯淡
- java1.4、1.5
- ELA算法用于保险欺诈-伪造照片检测及EXIF信息显示
- 3.4 Spark RDD Action操作7-saveAsNewAPIHadoopFile、saveAsNewAPIHadoopDataset
- Angular 4入门教程系列:6:Tour Of Heroes之服务和依赖注入
- PAT乙级1017. A除以B(20)
- Ubuntu 17.10 已经发布,图解新功能
- 错过等半年 | 年薪30万都要学的Linux云计算课程,即将满80人班
- java2.7
- 区块链中的密码学
- java2.8
- mysql下的多一表多结果的联合查询外加求和
- 贾跃亭辞任乐视网总经理职务,主要精力将放在上市公司和汽车业务上
- 不是为了输赢!柯洁 VS AlphaGo 大战之前,你需要知道的几大看点