P1480 A/B Problem

#include <iostream>
using namespace std;
int dividend[5000] = { 0 };//被除数
int quotient[5000] = {0};//商

int main() {
    //由于int无法容纳足够多的数字,只能用string来存储
    string a;
    int divisor;//题目中除数范围在int内
    cin >> a >> divisor;

    //获取字符串的长度:
    int al = a.length();
   

    for (int i = 0; i < al; i++)
    {
        //字符串a是可以变成a[i]的,每一个元素就是对应的字符
        //-'0'可以将数字字符转换为数字
        dividend[i] = a[i]-'0';
    }
  
    
    long long remainder = 0;//记录中间数
    for (int i = 0;i < al;i++)//被除数开始逐个计算
    {   
        quotient[i] = (remainder * 10 + dividend[i]) / divisor;//计算商的每一位
        remainder = remainder * 10 + dividend[i] - (quotient[i] * divisor);//计算相减的中间数
     }
  

    
    //不判断到最后一位的原因是,如果计算结果为0,能保证输出计算结果

   
    int zeroflag = 0;//设置一个发现非零数的标记,默认为0
    for (int i = 0; i < al ; i++)
    {
        //若前边几位都是0,且不是最后一位,且标记还是为0,则跳过本次循环
        if (quotient[i] == 0 && zeroflag == 0 && i < al-1)
        {
            continue;
        }
        zeroflag = 1;//找到第一个非零数之后,就将标记设位1,这样就不会影响到后续的0
        cout << quotient[i];
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值