PAT乙级1017

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
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char a[1010];
 4 int n,flag,temp;
 5 int main()
 6 {
 7   cin>>a>>n;
 8   int len=strlen(a);
 9   for(int i=0;i<len;i++)
10   {
11     temp=temp*10+a[i]-'0';
12     if(temp>=n)
13     {
14       cout<<temp/n;
15       flag=1;
16     }
17     else if(flag)
18     {
19       cout<<0;
20     }
21     temp=temp%n;
22   }
23   if(flag==0)
24   cout<<0;
25   cout<<" "<<temp;
26   return 0;
27 }

模拟除法

flag==1 保证最后答案一定不为0,商的长度大于等于1,所以在之后的商的某位为0时直接输出0;

如果没有flag这个标记,当被除数为0时(temp==0),除数不为0时,temp%n==0,所以会输出很多个0,因而错误d=====( ̄▽ ̄*)b。

原文地址:https://www.cnblogs.com/zuiaimiusi/p/10639175.html