首页 > 编程语言 >c++ u7-02-高精度乘法

c++ u7-02-高精度乘法

时间:2024-07-06 20:08:26浏览次数:7  
标签:02 int u7 c++ add len l1 include s1

本节课作业:

链接:https://pan.baidu.com/s/13-FC86jSHGziRDA8lqzimg?pwd=owv1
提取码:owv1

 

 

 

高精度乘法

 

 

 

 

 

 

 

 

 

 

 

   

 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string x , y;
int a[50010] , b[50010] , c[50010];
int main()
{
    cin >> x >> y;
    int l1=x.size() , l2 = y.size();
    for(int i = 1 ; i <= l1 ; i++){
        a[i] = x[l1-i]-'0';    
    }
    
    for(int i = 1 ; i <= l2 ; i++){
        b[i] = y[l2-i]-'0';    
    }
    for(int i = 1 ; i <= l1 ; i++){
        for(int j = 1 ; j <= l2 ; j++){
            c[i+j-1] += a[i] * b[j];
        }
    }
    int l = l1 + l2;
    for(int i = 1 ; i <= l - 1 ; ++i){
        if(c[i] > 9){
            c[i+1] += c[i] / 10;
            c[i] %= 10;    
        }
    }
    while(c[l] == 0 && l > 1){
        l--;    
    }
    for(int i = l ; i >= 1 ; i--){
        cout << c[i];    
    }
    return 0;
} 
View Code

 

 

 

#include<bits/stdc++.h>  
using namespace std;  
  
// 初始化两个数组,mul用于存储每一步的乘积,add用于存储乘积的各位数字之和的累积和  
int mul[10010] = {1}, add[10010];  
  
int main(){  
    int n, l = 2; // n是输入的数字,l是当前mul数组的长度(包括预留空间)  
    cin >> n; // 读取n的值  
  
    // 外层循环:从1乘到n  
    for(int i = 1; i <= n; i++){  
        // 内层循环1:计算当前的乘积  
        for(int j = 0; j < l; j++){  
            mul[j] *= i; // 将当前索引的值乘以i  
        }  
  
        // 更新l的值,为可能的进位预留空间  
        // 注意:这里简单地将l增加2可能不是最优的,但在这个例子中足够了  
        l += 2;  
  
        // 内层循环2:处理进位  
        for(int j = 0; j < l; j++){  
            // 将当前位的进位加到下一位  
            mul[j + 1] += mul[j] / 10;  
            // 更新当前位的值(去掉进位)  
            mul[j] %= 10;  
        }  
  
        // 初始化add数组的这一轮计算(理论上这一步不是必需的,因为add数组会被累加)  
        // 但为了清晰起见,可以在这里明确设置add数组的前l位为0(尽管它们可能已经是0了)  
  
        // 内层循环3:计算当前乘积的各位数字之和,并累加到add数组上  
        for(int j = 0; j < l; j++){  
            add[j] += mul[j]; // 将mul数组的当前位加到add数组的对应位上  
            // 处理add数组的进位  
            add[j + 1] += add[j] / 10;  
            add[j] %= 10; // 更新add数组的当前位(去掉进位)  
        }  
  
        // 注意:这里我们不需要重置mul数组或l的值,因为它们是累积计算的  
    }  
  
    // 找到add数组中最后一个非零元素的索引  
    int idx = l - 1; // 从最后一个元素开始检查  
    while(idx >= 0 && add[idx] == 0) idx--;  
  
    // 输出结果  
    // 从idx开始,逆序输出add数组中的元素  
    for(int i = idx; i >= 0; i--) cout << add[i];  
    cout << endl; // 可选:在输出结束后添加换行符  
  
    return 0;  
}
View Code

 

 

 

高精度除法   高精度除低精度

 

 

 

 

 

 

 

 

#include <iostream>
using namespace std;
int a[10010], b, c[10010];

int main() {
    string s1;
    cin >> s1 >> b;
    int l1 = s1.size();
    for (int i = 0; i < l1; i++)
        a[i] = s1[i] - '0';
    long long r = 0;
    for (int i = 0; i < l1; i++) {
        r = a[i] + r * 10;
        c[i] = r / b;
        r %= b;
    }
    int len = 0;
    while(!c[len]){
        len++;        
    }    
    for (int i = len; i < l1; i++){
        cout << c[i];    
    }    
        cout << endl << r;    
    return 0;
}
View Code

 

 

标签:02,int,u7,c++,add,len,l1,include,s1
From: https://www.cnblogs.com/jayxuan/p/18287673

相关文章

  • C++算法实践04-寻找两个正序数组的中位数
    一、题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nu......
  • 2024.7.6 鲜花
    梅菲斯特——女王蜂fromK8Heラストチャンスに飢えたつま先が踊り出すまま駆けたこの夜空並のスタンスじゃ靡かない星は宝石の憧れ浮かぶ涙と汗は血の名残り目の中でしか泳げなきゃ芝居だけどステージが逃がさないいついつまでも憧れ焦がれているよI’veneverseen......
  • leetcode 102. 二叉树的层序遍历
    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入:root=[]输出:[]提示:树中节点数目在范围 [0,2000] ......
  • 沪越联赛 - 2024年6月月赛Div2 题解
    问题A:替换题目描述小明每次注释的时候都写\(n\)个/。小红看了小明的程序,觉得太难看了,那么多/,所以决定把这些没用的/都去掉。小红定义了一个宏命令,每次可以将所有连续的\(m\)个/替换成空(注意不是空格)小明得知了小红的企图后非常着急,因为他知道光把/都去掉,那么原......
  • 使用c++实现图形化文件浏览
       代码中使用了SDL2库,需要先安装并正确配置相关的开发环境。还需要添加字体加载和处理的代码,为图方便,省略。#include<iostream>#include<SDL2/SDL.h>#include<SDL2/SDL_image.h>#include<vector>#include<string>#include<filesystem>constintSCREEN......
  • C++题解(3) 信息学奥赛一本通: 1013:温度表达转化 洛谷:B2013 温度表达转化 土豆编程:M
    【题目描述】利用公式 C=5×(F−32)÷9C=5×(F−32)÷9(其中CC表示摄氏温度,FF表示华氏温度)进行计算转化,输入华氏温度FF,输出摄氏温度CC,要求精确到小数点后55位。【输入】输入一行,包含一个实数FF,表示华氏温度。(F≥−459.67)(F≥−459.67)【输出】输出一行,包含一个......
  • 前端生成二维码(N种方法选择2024最新)
    文来分享5个用于生成二维码的JavaScript工具库,助你快速生成二维码!node-qrcodenode-qrcode是一个用于生成二维码的Node.js库,它支持多种数据格式,并且可以将生成的二维码导出为各种图像格式,如PNG、JPEG、SVG和DataURI,其适用于服务端和客户端。node-qrcode的特点如下:......
  • day01 初学c++第一章
    目录一、前置代码以及cout打印两条预处理代码:count打印语句:二、符号常量 三、标识符的命名规范四、数据类型 c++中整数类型的表现形式:在c++中,数字存在有符号和无符号之分的c++中实型的表现形式:代码所用函数:c++中字符型的表现形式:基础运算总结:转义字符c++中字......
  • Day02
    总结Java特性:简单性,面向对象,可移植性(跨平台),高性能,分布式,动态性,多线程,安全性,健壮性单行注释://多行注释:/**/文档注释:JavaDoc:/***/强类型语言:安全性高,速度低,所有变量必须先定义后使用,使用要严格符合规定。数据类型变量名=值;弱类型语言:在JS中运用较多。位bit:数据存储......
  • C++开发调试工具:GDB调试,windebug调试,adb调试
    我们在C++开发过程中时常避免不了要调试追踪,一下介绍最主流的三种调试工具:一.GDB调试1.coredump文件:coredump文件是程序异常时系统产生的错误日志文件,即核心转储文件;编译一个debug程序,必须是debug版本,否则无法产生coredump文件;编译命令:g++test.cpp-omytest-g,必须要......