zoukankan      html  css  js  c++  java
  • 【算法笔记】B1017 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

    codes:

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 struct num{
     5     int d[1010];
     6     int len;
     7     num(){
     8         memset(d, 0, sizeof(d));
     9         len = 0;
    10     }
    11 };
    12 //先保存数的低位,以便除的时候去掉高位的0
    13 num change(string s){
    14     num a;
    15     a.len = s.size();
    16     for(int i = 0; i < a.len; i++){
    17         a.d[i] = s[a.len - i - 1] - '0';
    18     }
    19     return a;
    20 }
    21 num divide(num a, int b, int& r){
    22     num c;
    23     c.len = a.len;
    24     for(int i = a.len - 1; i>=0; i--){
    25         r = r * 10 + a.d[i];
    26         if(r < b) c.d[i] = 0;//不够除商0
    27         else{
    28             c.d[i] = r / b;
    29             r = r % b;
    30         } 
    31     }
    32     //去掉高位的0,只需要长度减小,实际没有删除
    33     while(c.len - 1 >= 1 && c.d[c.len - 1] == 0){
    34         c.len--;
    35     }
    36     return c;
    37 }
    38 void print(num n){
    39     for(int i = n.len - 1; i >= 0; i--){
    40         cout<<n.d[i];
    41     }
    42 }
    43 int main(){
    44     string str1, str2;
    45     int b, r = 0;
    46     cin>>str1>>b;
    47     num a = change(str1);
    48     print(divide(a, b, r));
    49     cout<<" "<<r;
    50     return 0;
    51 }
  • 相关阅读:
    IOC
    paxos算法
    搜索引擎相关
    java常识
    Redis相关概念
    Keepalived简单理解
    LVS简单理解
    dbproxy
    用不上索引的sql
    二叉树、B树、B+树、B*树、VAL树、红黑树
  • 原文地址:https://www.cnblogs.com/chunlinn/p/10627766.html
Copyright © 2011-2022 走看看