1017 A除以B
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
解析:
1.大致思路
给出的正整数位数已超过Int long
所能表示的范围,所以需要考虑大整数的运算。利用string存储字符。依次从最高位进行除法运算,但需要把每次结果乘以他的位数与下一结果相加。且把余数加入下一位,最后的余数即为真正的余数。
2.注意问题
1)字符数字转为整型数字 a[2]=‘2’ a[2]-‘0’—>2
2) 为了避免结果再转换为string类型可以每次计算结束就输出所得商
3)第一个数字小于B 不输出0 和连续多个0情况 例如200/2增加判断条件 上一位是否进行计算
answer:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,q;
int b,r=0;
int k=0;
int flag=0;
cin>>a>>b;
for(int i=0;i<a.length();i++)
{
k=r*10+(a[i]-'0');//计算数
r=k%b;//余数
if(k>=b)
{
cout<<k/b;
flag=1;
}
else if(k<b&&flag==1) cout<<0;
}
if(flag==0)cout<<0;
cout<<" "<<r/10;
return 0;
}