这一道题真的比较难,我一开始看到1000位就想到用string a,然后用一个str[1000]将a字符串全部转化为数字,最后进行除法的模拟。思路时没问题的,但是我去看了一眼柳婼的代码,就回不去了。她写的太简便了,就是一个简单的除法的模拟。 先看题目:
再说思路,首先是数据存入string a中,然后进行除法的模拟。每一位的余数,都将在下一位*10加上此位的数值在进行除法。特殊的是第一位,此时没有上一位,所以我们进行特判处理,所以除了第一位都可以放在循环处理。先定义两个变量res,temp(分别存每一位的商和余数)。特判的第一位,res存第一位除以b的值,如果不等于0即有商(自己找两个数除着看看,比如47/3),如果res不为0,那么这就是余数的第一位,输出。注意如果a只有一位时,此时就算时0也要输入,毕竟就这一位。此后用temp存第一位/b的余数。然后是1——len-1的循环,一直求某一位的商和余数,直到最后(有一个好处是除不掉时res=0可以直接输出0)。然后是输出一个空格加最后一位剩下的余数temp.
好了,就是这样,代码如下:
//你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
string a;//100位太大了,longlong都不够,直接用string存好了
int b;//b一位,in
int q,r;//商和余数
//写成A=B×Q+R,分别输出q,r
int main(){
cin >> a >> b;
int len = a.size();//长度
int res = (a[0] - '0') / b;//计算第一位上除以B的情况
if(res != 0|| len == 1)
cout << res;//当第一位除以b有值即有商的第一位,或者商只有一位时,输出一个数字
int temp = (a[0] - '0') % b;//初始化余数
for(int i = 1; i < len; i++){
res =((temp * 10) + a[i] - '0') / b;
cout << res;
temp = ((temp * 10) + a[i] - '0') % b;
}
cout << " " << temp << endl;
return 0;
}