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

  1. 题目意思
    一个整数A除以一位整数B,A可能是大整数;
    输出商和余数
  2. 主要思路
    大整数用字符串表示
    首先对第一位进行分析,如果除以B之后等于0,则此时要考虑两种情况,等于0的原因肯定是因为除数大于被除数,但是如果是两位数及两位数以上,后面还会有商的出现,所以分析第一个0不要输出,否则商的前面会多一个0;另外,如果整个结果的商就是0,则需要输出它的商就是为0,此时的情况只可能是被除数是一位数的情况
    这一步清楚了,后面的步骤就简单了
    将得到的余数与A的下一位组合成一个两位数进行除法运算,直接输出所得的商即可,余数将于A的下一位再组合。此处用循环
    整个步骤完成后,将会输出A/B的商,再在循环体外输出余数
  3. 完整代码
#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;
} 

猜你喜欢

转载自blog.csdn.net/weixin_44549439/article/details/112861168