zoukankan      html  css  js  c++  java
  • 大数对整数的相除、取模、相乘运算

    模拟...

    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    using namespace std;
    #define maxn 10000
    
    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a%b);
    }
    
    int modNum(char* ch,int b) // 大数对整数的取模运算
    {
        int left=0,i;
        for(i=-1; ch[i+1]!=''; ++i);
        for(int j=0; j<=i; ++j)
        {
            left = (left*10)%b+ch[j]-'0';
            left %=b;
        }
        return left;
    }
    
    char* div(char *ch, int b) { // 大数对整数的相除运算
        char ansdiv[1010] = "";
        int cnt = 0, remain = 0;
        for (int i=0; ch[i]; ++i) {
            if (remain*10+ch[i]-'0' >= b) { // 够除
                ansdiv[cnt++] = (remain*10 + ch[i]-'0')/b+'0';
                remain = (remain*10 + ch[i]-'0')%b;
            }
            else if (cnt != 0){
                ansdiv[cnt++] = '0'; // 否则添0
                remain = remain*10 + ch[i] - '0';
            }
            else remain = remain*10 + ch[i] - '0';
        }
        if (remain && cnt==0) {
            ansdiv[0] = '0';
        }
        return ansdiv;
    }
    
    char* multi(char *ch, int b)  { // 大数和整数相乘
        int i;
        int jinwei = 0;
        char ansdiv[1010];
        for (i=-1; ch[i+1]; ++i); // i为字符串长度
        int cnt = 0;
    
        for (int j=i; j>=0; --j) {
            int temp = (ch[j] - '0' + jinwei) * b;
            ansdiv[cnt++] = temp % 10 + '0';
            temp = temp / 10;
        }
        while(jinwei) {
            ansdiv[cnt++] = jinwei % 10;
            jinwei /= 10;
        }
        ansdiv[cnt++] = '';
        return ansdiv;
    }
    
    int main() {
        int mod;
        int b;
        char res[210];
        char *ans;
        while(cin >> res >> b) {
            // 除法运算
            ans = div(res, b);
            cout << ans << "...
    ";
            // 乘法运算
            ans = multi(res, b);
            int len = strlen(ans);
            for (int i=len-1; i>=0; --i) {
                cout << ans[i];
            }
            cout << "---
    ";
            //取模运算
            int ansmod = modNum(res, b);
            cout << ansmod << "....
    ";
        }
        return 0;
    }
    

      

  • 相关阅读:
    UESTC 250 windy数 数位dp
    hdu 3555 bomb 数位dp
    hdu 2089 不要62 数位dp入门
    poj 3740 Easy Finding 精确匹配
    codeforces 589F. Gourmet and Banquet 二分+网络流
    hdu 3572 Escape 网络流
    hdu 3572 Task Schedule 网络流
    POJ 1823 Hotel 线段树
    2016年,机器学习和人工智能领域有什么重大进展?
    【由浅入深的VR技术之旅】初学VR要解决的三个核心技术问题
  • 原文地址:https://www.cnblogs.com/icode-girl/p/5519160.html
Copyright © 2011-2022 走看看