【PAT乙级】1017 A除以B

it2024-12-13  15

问题描述 本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式 在一行中依次输出 Q 和 R,中间以 1 空格分隔。

样例输入 123456789050987654321 7

样例输出 17636684150141093474 3

分析 容易漏考虑 A<B 的情况

C++代码

#include<bits/stdc++.h> using namespace std; int main(){ vector<char>c,q; char ch; while(~scanf("%c",&ch)){ if(ch==' ') break; c.push_back(ch); } int b; cin>>b; int r; //易漏考虑的情况: if(c.size()==1&&c[0]-'0'<b){ cout<<0<<" "<<c[0]-'0'; return 0; } while(!c.empty()){ int a=c[0]-'0'; c.erase(c.begin()); if(c.empty()){ r=a; break; } a=a*10+(c[0]-'0'); r=a%b; cout<<a/b; c[0]=r+'0'; } cout<<" "; cout<<r; return 0; }

备注 一开始写的是这个样子,但是总是运行超时

vector<char>c,q; while(true){ char ch; cin>>ch; if(ch==' ') break; c.push_back(ch); } int b; cin>>b;

改成这个就好了

vector<char>c,q; char ch; while(~scanf("%c",&ch)){ if(ch==' ') break; c.push_back(ch); } int b; cin>>b;
最新回复(0)