1017 A除以B (20分)_Quentin

题目链接: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

题目分析:
题目读完觉得是那么的简单,但是定睛一看题目中的A并不是不超过1000的正整数,而是不超过1000位的正整数,那怎么办呢?(不怕丢人我第一次做写了100多行)
如果这个题目是让你手算你怎么算?是不是一位位的除,每位得到余数然后接着除,直到最后除不动了,商和余数都有了,那我们的做法就模拟手算的过程,因为数的位数太大所以我们用字符串来表示数,然后由每一位减去‘0’来得到每一位的数字。

题目代码:

#include <iostream>
using namespace std;
int main(){
	string A;
	int B, digit=0, temp=0;
	cin >> A >> B;
	temp = (A[0]-'0')/B;//第一位 
	if(temp!=0 || A.length()==1)//如果第一位不小于B才输出 
		cout << temp;//另外要注意只有一位的A并且小于B的情况 
	digit = (A[0]-'0')%B;//先取一位余数 
	for(int i=1; i<A.length(); i++){
		temp = (digit*10+A[i]-'0')/B;//求商 
		cout << temp;//把求得的商一个接一个的输出出来 
		digit = (digit*10+A[i]-'0')%B;//取余 
	}
	cout << " " << digit;//把最后余数输出 
	return 0;
}

一开始还想过把求出的每一位用字符串或者整型数组存储起来,然后最后输出商,后来发现一位接一位的输出并不会影响题目的正确性,所以为了避免多申请空间和参数就采用了这样的输出方式。

bilibili:羊卓的杨

猜你喜欢

转载自blog.csdn.net/qq_45800977/article/details/106318680