//本题关键就在于怎么存不超过1000位的数字 //模仿除法的整个过程 #include#include using namespace std; int main() { string str; int a; cin >> str >> a; int q, r = 0;//商、余数 string str1; for (unsigned int i = 0; i < str.length(); i++) { q = ((str[i] - '0') + r * 10) / a; r = ((str[i] - '0') + r * 10) % a; string s = to_string(q); str1.insert(i, s); } //把前面的零去了 if (str.length() == 1) { cout << str1 << " " << r << endl; } else { if (str1[0] != '0') { cout << str1[0]; } for (unsigned int i = 1; i < str1.length(); i++) { cout << str1[i] ; } cout << " " << r << endl; } //system("pause"); return 0; }
上面自己写的代码,求出每一位的商之后用了一个字符串装入,最后在输出 空间复杂度不是很好
改进后的代码:
int main()
{
string str;
int a;
cin >> str >> a;
int q, r = 0;//商、余数
string str1;
if (str.length() == 1)
{
q = ((str[0] - '0') + r * 10) / a;
r = ((str[0] - '0') + r * 10) % a;
cout << q << " " << r << endl;
}
else
{
q = ((str[0] - '0') + r * 10) / a;
r = ((str[0] - '0') + r * 10) % a;
if (q != 0)
{
cout << q;
}
for (unsigned int i = 1; i < str.length(); i++)
{
q = ((str[i] - '0') + r * 10) / a;
r = ((str[i] - '0') + r * 10) % a;
cout << q;
}
cout << " " << r << endl;
}
//system("pause");
return 0;
}



