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
codes:
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 struct num{ 5 int d[1010]; 6 int len; 7 num(){ 8 memset(d, 0, sizeof(d)); 9 len = 0; 10 } 11 }; 12 //先保存数的低位,以便除的时候去掉高位的0 13 num change(string s){ 14 num a; 15 a.len = s.size(); 16 for(int i = 0; i < a.len; i++){ 17 a.d[i] = s[a.len - i - 1] - '0'; 18 } 19 return a; 20 } 21 num divide(num a, int b, int& r){ 22 num c; 23 c.len = a.len; 24 for(int i = a.len - 1; i>=0; i--){ 25 r = r * 10 + a.d[i]; 26 if(r < b) c.d[i] = 0;//不够除商0 27 else{ 28 c.d[i] = r / b; 29 r = r % b; 30 } 31 } 32 //去掉高位的0,只需要长度减小,实际没有删除 33 while(c.len - 1 >= 1 && c.d[c.len - 1] == 0){ 34 c.len--; 35 } 36 return c; 37 } 38 void print(num n){ 39 for(int i = n.len - 1; i >= 0; i--){ 40 cout<<n.d[i]; 41 } 42 } 43 int main(){ 44 string str1, str2; 45 int b, r = 0; 46 cin>>str1>>b; 47 num a = change(str1); 48 print(divide(a, b, r)); 49 cout<<" "<<r; 50 return 0; 51 }