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

      

  • 相关阅读:
    PHP防止跨站表单提交与同站跨页伪造表单的攻击
    dz数据结构
    DiscuzX的目录权限设置1
    discuz 文档说明
    discuz x 系列目录结构说明
    验证码问题
    Discuz! X2验证码的产生及验证
    Discuz 升级X3问题汇总整理
    IIS7以上版本去掉伪静态去掉index.php方法
    Discuz 模板标签说明
  • 原文地址:https://www.cnblogs.com/icode-girl/p/5519160.html
Copyright © 2011-2022 走看看