本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
- 题目意思
一个整数A除以一位整数B,A可能是大整数;
输出商和余数 - 主要思路
大整数用字符串表示
首先对第一位进行分析,如果除以B之后等于0,则此时要考虑两种情况,等于0的原因肯定是因为除数大于被除数,但是如果是两位数及两位数以上,后面还会有商的出现,所以分析第一个0不要输出,否则商的前面会多一个0;另外,如果整个结果的商就是0,则需要输出它的商就是为0,此时的情况只可能是被除数是一位数的情况
这一步清楚了,后面的步骤就简单了
将得到的余数与A的下一位组合成一个两位数进行除法运算,直接输出所得的商即可,余数将于A的下一位再组合。此处用循环
整个步骤完成后,将会输出A/B的商,再在循环体外输出余数 - 完整代码
#include<iostream>
#include<string.h>
using namespace std;
int main(){
string s; //大整数,利用字符串
int b; //一位整数
int i,t,temp; //t存储商,temp存储余数
cin>>s>>b;
//首先对第一位进行单独处理,因为有可能就只有一位数
t=(s[0]-'0')/b; //对第一位取商
if((t!=0&&s.length()>1)||s.length()==1) //如果只有一位数或者多位数且商不为0,则输出商的第一位
cout<<t;
temp=(s[0]-'0')%b; //对第一位取余数
//每次用上次的余数与接下来的一位数,组成一个两位数进行除法运算,得到的商即为答案的一部分,依次输出即为结果,得到的余数再与大整数的下一位组合
for(i=1;i<s.length();i++){
t=(temp*10+s[i]-'0')/b;
cout<<t;
temp=(temp*10+s[i]-'0')%b;
}
cout<<" "<<temp; //输出余数
return 0;
}