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
题解:这道题目是模拟除法,刚开始做法一直有点问题,有一个测试点无法通过,后来借鉴了别人的思路,才写出一份AC代码。
原先错误代码:
1 #include<iostream> 2 #include<string> 3 4 using namespace std; 5 6 int main() 7 { 8 string a,q; 9 int b, r; 10 cin>>a>>b; 11 for( int i = 0; i < a.length(); i++) 12 { 13 14 if( a[i] - '0' < b && i + 1 < a.length()){ 15 if( i != 0) q += '0'; 16 i++; 17 a[i] += (a[i-1] - '0')*10; 18 } 19 20 if( i + 1 == a.length()){ 21 if( a[i] - '0' < b){ 22 q += '0'; 23 r = a[i] - '0'; 24 break; 25 } 26 else{ 27 q += (((a[i] - '0')/b) + '0'); 28 r = (a[i] - '0')%b; 29 break; 30 } 31 } 32 q += (((a[i] - '0')/b) + '0'); 33 a[i+1] += ((a[i] - '0')%b)*10; 34 } 35 cout<<q<<' '<<r; 36 return 0; 37 }
但是这段代码我至今不知道那个测试点为什么过不去,如果有大佬知道,欢迎在评论区留言讨论。
以下为AC代码:
1 #include<iostream> 2 #include<string> 3 4 using namespace std; 5 6 int main() 7 { 8 string a, q; 9 int b, r, temp; 10 cin>>a>>b; 11 temp = a[0] - '0'; 12 if( temp >= b ) q += temp / b + '0'; 13 r = temp % b; 14 for( int i = 1; i < a.length(); i++){ 15 temp = r*10 + a[i] - '0'; 16 q += temp / b + '0'; 17 r = temp % b; 18 } 19 if( a.length() == 1){ 20 q = ""; 21 q += (a[0] - '0')/ b + '0'; 22 r = (a[0] - '0')% b; 23 } 24 cout<<q<<" "<<r; 25 return 0; 26 }
这道题我感觉数据特别强,也给我一个启示就是,如果一个方法做不出来,或许是方法有问题,我可以试着简化思路,换个方法。