zoukankan      html  css  js  c++  java
  • 1017 A除以B

    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

        这道题目并不难,输入的数据用string型变量存放,计算的时候只需要把字符转换为对应的整形即可。注意在除的时候,是要分情况的,

    首先看够不够除,够除的话还要看有没有余数?然后就是不够出的话,就要借位了;而且有的时候还不能借位,所以要考虑到所有可能的

    情况。

        下面附上代码,代码中注释了一些比较容易忽略的测试数据,可以测试一下

     1 #include<iostream>
     2 #include<vector>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     string A;
     8     vector<int> Q;
     9     short B=0,R,q,tem;
    10     cin>>A>>B;
    11     R=0;  //初始化余数为0
    12     for(unsigned int i=0;i<A.length();)
    13     {
    14         if((A[i]-'0')>=B&&R==0) //够除,并且上一次做除法是整除,余0
    15         {
    16             R=(A[i]-'0')%B;  //取余数
    17             q=(A[i]-'0')/B;  //取商
    18             Q.push_back(q);
    19             i++;
    20         }
    21         else if((A[i]-'0')<B&&R==0) //不够除,就借一位,并且上一次做除法是整除,余0
    22         {
    23             if(i+1<A.length())  //借位的时候,判断有没有越界;如A=70、B=7或A=6、B=7,此时借位会越界
    24             {
    25                 Q.push_back(0);  //不够除,商零
    26                 tem=(A[i]-'0')*10+(A[i+1]-'0');
    27                 R=tem%B;
    28                 q=tem/B;
    29                 Q.push_back(q);
    30                 i+=2;
    31             }
    32             else  //如A=70、B=7或A=6、B=7,不能借位,直接取商取余输出并结束
    33             {
    34                 if(i==0) //A=6、B=7
    35                 {
    36                     cout<<(A[i]-'0')/B<<" "<<(A[i]-'0')%B;
    37                     return 0;
    38                 }
    39                 if(i-1>=0) //A=70、B=7或A=71、B=7
    40                 {
    41                     Q.push_back(0);
    42                     R=(A[i]-'0')%B;
    43                     break;
    44                 }
    45             }
    46         }
    47         else  //上一次没有整除,有余数
    48         {
    49             tem=R*10+(A[i]-'0');
    50             R=tem%B;
    51             q=tem/B;
    52             Q.push_back(q);
    53             i++;
    54         }
    55     }
    56     for(unsigned int i=0;i<Q.size();i++ )
    57     {
    58         if(i==0&&Q[i]==0)
    59             continue;
    60         cout<<Q[i];
    61     }
    62     cout<<" "<<R;
    63     return 0;
    64 }

    ac了

  • 相关阅读:
    学习OpenGL:笔记八
    学习OpenGL:笔记七
    学习OpenGL:笔记六
    学习OpenGL:笔记五
    学习OpenGL:笔记四
    将Redis加入到Windows服务中
    Oracle设置列宽,行数
    word文档最上面有一条不是页眉的线
    myeclipse中配置自己安装的Tomcat
    SSM框架mapper.xml模糊查询语句
  • 原文地址:https://www.cnblogs.com/buanxu/p/12813111.html
Copyright © 2011-2022 走看看