#include <iostream>
using namespace std;
#include <string>
int main(){
string A;
int B, a = 0, Q[1001] = {0}, R, j=0;
//scanf("%s %d", &A, &B); //为什么scanf读不到数
cin >> A >> B;
for(int i = 0; i < A.length(); i++){
a += A[i] - '0';
if(a / B == 0) a *= 10;
else{
//Q = Q * 10 + ( a / B); //位数太多,无法用int 存放,尝试数组,以及字符串
Q[j++] = a / B;
if(i == A.length() - 1){
R = a % B;
break;
}
else a = (a % B) * 10;
}
}
for(int i = 0; i < j; i++){
cout << Q[i];
}
cout << " " << R;
//printf("%d %d", Q, R);
return 0;
}
二次修改,用数组存储和输出
测试点2错误。为何scanf读不到?
似乎必须要申明空间
string s;
a.resize(100); //需要预先分配空间
scanf("%s", &a[0]);
#include <iostream>
using namespace std;
#include <string>
int main(){
string A;
int B, a = 0, Q[1001] = {0}, R, j=0, k=0;
cin >> A >> B;
for(int i = 0; i < A.length(); i++){
a += A[i] - '0';
Q[j++] = a / B;
a = (a % B) * 10;
}
R = a / 10;
if(Q[0] == 0) k = 1;
for(k; k < j; k++){
cout << Q[k];
}
cout << " " << R;
return 0;
}
改进3
测试点2,关于只有一位,且A<B 的时候,比如6 7,必须对A.length()做一个判断。
#include <iostream>
using namespace std;
#include <string>
int main(){
string A;
int B, a, R = 0, q;
cin >> A >> B;
for(int i = 0; i < A.length(); i++){
a = R * 10 + A[i] - '0';
q = a / B;
if(!(A.length() > 1 && i == 0 && q == 0)) cout << q;
R = a % B;
}
cout << " " << R;
return 0;
}