洛谷 1303——A*B Problem

本文介绍了一种求两个大整数相乘的算法实现,通过将字符串形式的大整数转换为数组,并采用逐位相乘的方式计算其乘积。文章提供了一段详细的程序代码,演示了如何进行大数乘法运算。

题目描述

求两数的积。

输入输出格式

输入格式:
两个数

输出格式:

输入输出样例

输入样例#1:
1
2
输出样例#1:
2


注意:在相乘时不用判断进位,在后面及循环进位。


代码如下:

var i,x,y,j,z:integer;
    m,n:ansistring;
    a,b,c:array[1..10000] of int64;
begin
  for i:=1 to 10000 do c[i]:=0;        
  readln(m);
  read(n);
  x:=length(m);
  y:=length(n);
  for i:=1 to x do a[i]:=ord(m[x+1-i])-48;
  for i:=1 to y do b[i]:=ord(n[y+1-i])-48;
  for i:=(x+1) to 10000 do a[i]:=0;                                       
  for i:=(y+1) to 10000 do b[i]:=0;
  for i:=1 to y do
    for j:=1 to x do
     c[i-1+j]:=c[i-1+j]+a[j]*b[i];                  
  for i:=1 to 10000 do
    if c[i]>9 then
     while c[i]>9 do
       begin
        c[i+1]:=c[i+1]+c[i] div 10;                  
        c[i]:=c[i] mod 10;                          
       end;
  for i:=10000 downto 1 do if c[i]<>0 then break;
  for j:=i downto 1 do write(c[j]);
  readln;
end.
### 关于洛谷 B3797 的题目解析与编程实现 目前提供的引用材料中并未直接提及洛谷 B3797 这道题目的具体信息[^1]。然而,可以通过分析洛谷平台上的其他题目及其分类来推测该题可能涉及的知识点和解法。 #### 可能的题目背景 根据洛谷平台上常见的题目分类方式,B系列通常属于基础练习题,而编号接近 B3637(最长上升子序列)的题目可能会涉及到动态规划或其他经典算法[^3]。因此,可以合理猜测洛谷 B3797 是一道关于 **数组操作** 或者 **字符串处理** 类型的基础或中级难度题目。 #### 解决方案框架 如果假设此题为典型的数组或字符串问题,则解决方案可以从以下几个方面入手: 1. **输入输出理解**: 明确题目中的输入格式以及期望得到的结果形式。 2. **核心逻辑设计**: 基于题目需求构建相应的计算模型或者遍历策略。 3. **边界条件考虑**: 对极端情况下的行为进行定义,比如空数组、单元素等情况。 4. **优化空间复杂度**: 如果存在多次查询的需求,尝试预处理减少重复运算的时间消耗。 下面给出一段通用性的伪代码作为参考模板: ```python def solve_problem(input_data): result = [] # 初始化必要的参数 n = len(input_data) dp_table = [0]*n # 主循环体执行特定业务逻辑 for i in range(n): max_val = 0 for j in range(i): if condition_met(input_data[j], input_data[i]): max_val = max(max_val, dp_table[j]) dp_table[i] = max_val + transformation_function(input_data[i]) final_answer = compute_final_result(dp_table) return final_answer ``` 上述代码片段展示了如何通过双重嵌套循环解决问题,并利用`dp_table`存储中间状态以便后续使用。 #### 示例程序 (假定目标是最长递增子列) 考虑到之前提到过的相似案例——即求解最长递增子序列(LIS),这里提供一个具体的Python实现版本供学习交流之用: ```python from bisect import bisect_left def length_of_LIS(nums): tails = [] for num in nums: pos = bisect_left(tails, num) if pos == len(tails): tails.append(num) else: tails[pos] = num return len(tails) # 测试数据集 test_cases = [ ([10,9,2,5,3,7,101,18], 4), ([0,1,0,3,2,3], 4), ([7,7,7,7,7,7,7], 1) ] for seq, expected_len in test_cases: actual_len = length_of_LIS(seq) print(f"For sequence {seq}, the Length of LIS is {actual_len} ({'Correct' if actual_len==expected_len else 'Incorrect'})") ``` 以上脚本采用二分查找方法加速寻找合适位置的过程,在保持较低时间复杂度的同时也兼顾了可读性和扩展性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值