标签:ram amp text 除法 ++ -o time 注意 div
本题要求计算 /,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
123456789050987654321 7
17636684150141093474 3
思路:
看到输入样例这么长,则可以猜到输入必定是通过string 进行输入的,如果是string类型进行输入,则需要考虑这么个类似的情况: 00011454,即数字第一位可以为0,甚至可以一直为0。
同样值得注意的是,如果B为9,而A为8,A < B,那么此时A/B是没有整数部分的,此时先输出一个0,而后R直接输出,具体代码如下
1 #include <iostream> 2 using namespace std; 3 int main(){ 4 string A; 5 int R,B,Q; 6 int i = 0; 7 cin >> A >> B; 8 for(int k = 0; k < A.length(); k++){ 9 if(A[k] - ‘0‘ != 0){ 10 i = k; 11 break; 12 } 13 } 14 R = A[i] - ‘0‘; 15 if(R < B && i == A.length() - 1){ 16 cout << "0 " << R; 17 return 0; 18 } 19 while(++i < A.length()){ 20 R = R * 10 + (A[i] - ‘0‘); 21 cout << R / B; 22 R %= B; 23 } 24 cout << " " << R; 25 return 0; 26 }
值得学习的是:
模拟我们正常除法的算法为:
1 while(++i < A.length()){ 2 R = R * 10 + (A[i] - ‘0‘); 3 cout << R / B; 4 R %= B; 5 }
R/B取出写在上面的数字,R%B取出每一次除不尽时的余数,留作下一次使用
标签:ram amp text 除法 ++ -o time 注意 div
原文地址:https://www.cnblogs.com/ClinDHU/p/13262596.html