PTA乙级 1017 A除以B

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44916213/article/details/111598837