大数相乘(模拟乘法)

本文介绍了如何模拟实现大数相乘的算法,该问题常见于面试中。通过简化计算过程,可以避免使用String类型存储中间结果,提高效率。虽然在面试时未能想到最佳解,但事后作者找到了更简洁的方法。
摘要由CSDN通过智能技术生成

大数相乘(模拟乘法)

唉,面试的时候问过这一道题,面试的时候总想着用String型存每次计算的结果,所以计算过程据复杂,下来之后随便想想就想到怎么写了,真的是难受。

题目很简单,就是两个很大的数进行相乘求结果。

代码如下:

public class likou {
   
    public static void main(String[] args) {
   
        System.out.println(new likou().bigNumMult("923459", "766846"));//这两个数是举个例子,大数应该很大
    }

    public String bigNumMult(String num1,String num2)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我来帮你写一段大数相乘的 C 语言代码。首先,我们需要定义一个结构体来存储大数。 ``` typedef struct { int num[1000]; // 存储数位 int len; // 数位长度 } bignum; ``` 然后,我们可以定义函数来进行大数相乘。 ``` bignum multiply(bignum a, bignum b) { bignum c; memset(c.num, 0, sizeof(c.num)); c.len = a.len + b.len; for (int i = 1; i <= a.len; i++) { for (int j = 1; j <= b.len; j++) { c.num[i+j-1] += a.num[i] * b.num[j]; c.num[i+j] += c.num[i+j-1] / 10; c.num[i+j-1] %= 10; } } while (c.len > 1 && c.num[c.len] == 0) c.len--; return c; } ``` 这段代码实现了大数相乘的基本过程,使用了模拟竖式乘法的方法。需要注意的是,在最后我们需要去除前导零。 希望这段代码能帮到你。 ### 回答2: 当然可以帮您写一段C语言的大数相乘的代码。 ```c #include <stdio.h> #include <string.h> void multiply(char* num1, char* num2, char* result) { int len1 = strlen(num1); int len2 = strlen(num2); int* digits = (int*)malloc(sizeof(int) * (len1 + len2)); memset(digits, 0, sizeof(int) * (len1 + len2)); for (int i = len1 - 1; i >= 0; i--) { for (int j = len2 - 1; j >= 0; j--) { int product = (num1[i] - '0') * (num2[j] - '0'); int sum = digits[i + j + 1] + product; digits[i + j + 1] = sum % 10; digits[i + j] += sum / 10; } } int index = 0; while (index < len1 + len2 && digits[index] == 0) { index++; } if (index == len1 + len2) { strncpy(result, "0", 1); } else { int resultIndex = 0; while (index < len1 + len2) { result[resultIndex++] = digits[index] + '0'; index++; } result[resultIndex] = '\0'; } free(digits); } int main() { char num1[] = "123456789"; char num2[] = "987654321"; char result[100]; multiply(num1, num2, result); printf("Result: %s\n", result); return 0; } ``` 这段代码实现了两个大数相乘的功能。首先,通过字符串输入两个大数num1和num2。然后,使用数组digits存储相乘后的结果。接下来,通过两层循环将num1和num2上的每一位数字相乘,并将结果存放在digits数组中。最后,将digits数组拼接成一个字符串,得到最终的乘积结果。 在main函数中,我们定义了两个示例大数num1和num2,并声明了一个存放结果的数组result。然后调用multiply函数进行大数相乘,并将结果打印输出。 希望以上代码能满足您的需求,如有任何疑问,欢迎继续提问。 ### 回答3: 当然可以帮你写一段C语言的大数相乘代码。以下是一个简单的示例代码: ```c #include <stdio.h> #include <string.h> #define MAX_DIGITS 1000 void multiply(char num1[], char num2[], char result[]) { int len1 = strlen(num1); int len2 = strlen(num2); int product[MAX_DIGITS] = {0}; for (int i = len1 - 1; i >= 0; i--) { for (int j = len2 - 1; j >= 0; j--) { int digit1 = num1[i] - '0'; int digit2 = num2[j] - '0'; product[i + j + 1] += digit1 * digit2; } } int carry = 0; for (int i = len1 + len2 - 1; i >= 0; i--) { int digit = (product[i] + carry) % 10; carry = (product[i] + carry) / 10; result[i] = digit + '0'; } result[len1 + len2] = '\0'; } int main() { char num1[MAX_DIGITS]; char num2[MAX_DIGITS]; printf("请输入第一个大数:"); scanf("%s", num1); printf("请输入第二个大数:"); scanf("%s", num2); char result[MAX_DIGITS * 2]; multiply(num1, num2, result); printf("两个大数相乘的结果为:%s\n", result); return 0; } ``` 以上代码实现了两个大数相乘的功能。用户可以输入两个大数,程序将计算它们的乘积并输出结果。代码使用一个数组来保存中间乘积结果,然后将乘积结果的每位上的数字取出并存储在字符串中。最后,输出最终结果。请注意,此示例代码只处理非负的大数相乘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值