1017 A除以B
题目:
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入描述:
输入在1行中依次给出A和B,中间以1空格分隔。
输出描述:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
代码:
#include<iostream>
#include <string.h> //strlen所在的头文件
#define MAX 1000
using namespace std;
int main() {
char A[MAX];
int B;
int n;
int q=0;//上一位剩下来的余数
int flag = 0;//记录是否有输出
cin >> A >> B;
n = strlen(A);//注意对于数组来讲直接用strlen就可以得到长度
for (int i = 0; i < n; i++) {
if ((i != 0)||((q * 10 + (A[i] - '0')) / B)!=0) {//第一次除的时候如果末位为0
cout << ((q * 10 + (A[i] - '0')) / B);
flag = 1;
}
q = (q * 10 + (A[i]-'0')) % B;
}
if (flag == 0) {//如果只有一位数的时候,并且A<B的情况
cout << 0;
}
cout << " " << q;
}
思路:
因为位数比较多,所以用一个字符数组存储数字A的每一位,重复接下的俩步:
1、前一位留下的余数q
2、此位的数字(A[i]-‘0’)(存于字符数组里为字符)
每一步输出(q×10+(A[i]-‘0’))/B,输出之后,q变为(q×10+(A[i]-‘0’))%B,为下一步做准备。
还要注意:
①首位特殊处理,因为首位的商为0的时候不输出
②当A只有一位时也要特殊处理,因为假如不够除的画要商0