题目:A除以B
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
解题思路:
因为A是一个不超过1000位的数,所以不能利用int或long型变量来保存A的值,我们利用了一个char型数组来储存这个值,依次从高位来进行相除,除最高位以外,如果相除商不为0则将其值存入到商数组C中,否则C中存入0,最高位不可除则不做处理,再将余数*10+下一位的数值,这样就可以得到下个被除数,依次类推就可以得到整个商。
注意:
①A是不超过1000位的正整数,当设置A为char型数组的时候,要将其数组大小设为1001,因为数组含有一个隐藏位'\0';
②测试点1:是在当A<B的时候,其商需要等于0,所以必须要利用一个if语句来判断是否A<B,如果成立则商=0;
③由于A是一个char型数组,所以在判断的时候需要将A的值-48(ASCII的0),这样才能得到正确的值;
④在存储商的数组C中,最好是利用int型数组来进行存储,如果用char型变量来进行存储打印不出来数据。
代码:
#include<iostream>
#define MAX 1001
using namespace std;
int main()
{
char A[MAX]; //用一个数组来存储被除数
int C[MAX];
int B = 0; //表示除数
int j=0; //表示数组C的下标
cin>>A>>B;
int num = 0; //用于表示此时的被除数
int i; //表示被除数的数字个数
for(i=0;A[i]!=0;i++)
{
num = num * 10 + (A[i]-48); //注意:由于A是char数组,所以必须把数字从char型转化为int型
if(num >= B) //表示被除数不能被除
{
C[j++] = num / B; //表示除过后的整数部分
num = num % B; //表示除过后的余数部分
}
else if(num < B && i != 0) //表示被除数不可以被除
{
C[j++] = 0;
}
}
if(i == 1 && A[0]-48 < B) //表示被除数A小于除数B
{
C[j++] = 0;
}
for(int k=0;k<j;k++) //输出商
{
cout<<C[k];
}
cout<<" "<<num<<endl; //输出余数
system("pause");
return 0;
}