概述
题目
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是常用的思路:现将输入大数的第一个数取出来,作除法后输出,后面如果不能除尽,则将余数*10+下一位,否则输出。这类题目的特殊情况一般要单独做测试。
代码2是代码1的C++版,并没有本质区别。
代码3是直接从第一位(0开始计数)计算,如果s.length()==1,直接输出,剩下的都是两位数或者多位数的形式。如果是多位数的第一位数字与b相除后为0,则也不输出;其他情况都要输出。
代码4是代码3的升级版,将代码整理一下,有相同输出接口的拎在一起,会简化代码,也是可以的。
代码
代码1、C
//PAT1017V1
#include <stdio.h>
#include <string.h>
#define MAXN 1001
int main(void) {
char str[MAXN]; //A有1000位之多,只能转化成字符串。
int B, Q, R, len, i;
scanf("%s%d", str, &B);
len = strlen(str); //获取输入的一串数字的长度。
Q = ( str[0] - '0' ) / B; //获取第一个数的商。
/*长度只有1位 或 第一个数比被除数大,要先输出第一个数的商*/
if ( len == 1 || (len > 1 && Q != 0) ) printf("%d", Q);
R = ( str[0] - '0' ) % B; //获取第一个数的余数。
/*从第二个数开始到整个字符串结束,模拟手动除法*/
for ( i = 1; i < len; i++ ) {
Q = ( (R * 10) + str[i] - '0' ) / B; //获取商是 (余数*10 + 下一个数) / B.
printf("%d", Q); //每获取一个商就输出一次。
R = ( (R * 10) + str[i] - '0' ) % B; //获取余数是 (余数*10 + 下一个数) % B.
}
printf(" %d", R); //输出最后的余数。
return 0;
}
代码2、C++
//1017
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
int b,tmp=0,t=0;
cin>>s>>b;
t=(s[0]-'0')/b;
if((t!=0&&s.length() >1)||s.length() ==1) cout<<t;
tmp=(s[0]-'0')%b;
for(int i=1;i<s.length() ;i++){
t=(tmp*10+s[i]-'0')/b;
cout<<t;
tmp=(tmp*10+s[i]-'0')%b;
}
cout<<" "<<tmp;
return 0;
}
代码3、通盘考虑
//1017
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
int b,tmp=0,t=0;
cin>>s>>b;
for(int i=0;i<s.length() ;i++){
t=(tmp*10+s[i]-'0')/b;
if(s.length() ==1){
cout<<t;
}
else if(s.length() >1&&i==0&&t==0);
else cout<<t;
tmp=(tmp*10+s[i]-'0')%b;
}
cout<<" "<<tmp;
return 0;
}
代码4、代码3的优化
//1017
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
int b,tmp=0,t=0;
cin>>s>>b;
for(int i=0;i<s.length() ;i++){
t=(tmp*10+s[i]-'0')/b;
if(s.length() >1&&i==0&&t==0);
else cout<<t;
tmp=(tmp*10+s[i]-'0')%b;
}
cout<<" "<<tmp;
return 0;
}
最后
以上就是矮小蛋挞为你收集整理的1017 A除以B——C/C++实现题目算法代码的全部内容,希望文章能够帮你解决1017 A除以B——C/C++实现题目算法代码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复