如何将两个包含“大数字”(超过30位数字)的字符串相乘?

罗伊·赖恩施泰因

我正在做学校项目,首先需要接收2个巨大的数字(例如,不限大小的数字,可以说超过30个数字),第二步是将2个输入数字作为乘积的新数字在这两者中,我真的很努力。

到目前为止,我的代码:

键入定义以确保我处理正确的变量:

typedef char* verylong;
#define MAX_SIZE 100

输入法:

verylong input_long() {
    int i, len; //i for loop, len for strlen - using integer for it to avoid invoking the method more than 1 time
    verylong number;
    char temp_str[MAX_SIZE];    //the input from user - limited to 100

    gets(temp_str); //user input
    len = strlen(temp_str); //saving the length of the input
    number = (char*)calloc(len + 1, sizeof(char));  //allocating memory for the verylong and saving space for \0

    for (i = 0; i < len; i++) {
        if (temp_str[i] - '0' < 0 || temp_str[i] - '0' > 9) {   //the input is not a digit
            printf("\nBad input!\n");
            return NULL;
        }
        number[i] = temp_str[i];    //all is good -> add to the verylong number
    }
    number[i] = '\0';   //setting last spot

    return number;
}

我为完成任务而感到悲伤的尝试:

verylong multiply_verylong(verylong vl1, verylong vl2) {
    verylong mult;
    int cur, i, j, k, lrg, sml, temp_size;
    char *temp;

    j = 1;
    temp = (char*)calloc(lrg + sml + 1, sizeof(char)); //maximum amount of digits


    if (strlen(vl1) > strlen(vl2)) {
        lrg = strlen(vl1);
        sml = strlen(vl2);
    }
    else {
        lrg = strlen(vl2);
        sml = strlen(vl1);
    }

    cur = 0;

    for (i = sml-1; i >= 0; i--) {
        k = 0;
        temp_size = 0;
        cur = (vl1[i] - '0')*(vl2[i] - '0');
        printf("\ncur=%d", cur);
        if (cur > 9)
            temp_size = 2;
        else
            temp_size = 1;
        while (k < temp_size) {
            if (cur > 9)
                temp[j++] = (cur % 10) + '0';
            else
                temp[j++] = cur + '0';
            cur /= 10;
            k++;
        }
    }

    mult = (char*)calloc(j + 1, sizeof(char));
    for (i = 0; i < j; i++) {
        mult[i] = temp[i];
    }
    mult[i] = '\0';
    free(temp);
    return mult;
}

长话短说,我知道我在乘法方法上做错了,因为我只通过一次将两位数相加就将数字相加,结果我真的迷路了。

谢谢。

4386427

我的建议是将任务分解为一些更简单的任务。

您将如何在纸上进行乘法?

123 * 456 ->  1 * (456 * 100) + 2 * (456 * 10) + 3 * (456 * 1)

或用不同的方式写

   3 * (  1 * 456)
 + 2 * ( 10 * 456)
 + 1 * (100 * 456)
   ---------------
  SUM TO GET RESULT

or

   3 *   456
 + 2 *  4560
 + 1 * 45600
   ---------------
  SUM TO GET RESULT

由此您可以确定3个任务

  • 乘以10的幂,即1、10、100等(即在末尾加零)
  • 将字符串数与一位数字相乘
  • 加两个字符串数。

为每个步骤编写简单的函数。

char* mulPowerOf10(char* sn, unsigned power)
{
    ...
}

char* mulDigit(char* sn, char digit)
{
   ...
}

char* addNumbers(char* snA, char* snB)
{
   ...
}

使用这3个简单函数,您可以将实数乘法放在一起。在psedo代码中:

char* mulNumbers(char* snA, char* snB)
{
    char* result = malloc(2);
    strcpy(result, "0");
    unsigned power = 0;
    for_each_digit D in snA
    {
        char* t1 = mulPowerOf10(snB, power)
        char* t2 = mulDigit(t1, D)
        result = addNumbers(result, t2)
        ++power;
    }

    free(.. what needs to be freed ..);

    return result;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅使用8位数字将两个32位数字相乘

来自分类Dev

如何对两个带有4位数字(年份)的字符串进行排序?

来自分类Dev

如何将数字字符串化为两个特定的字符串

来自分类Dev

如何将5位数字编码为3个字符的字符串

来自分类Dev

错误的结果将C中的两个32位数字相乘

来自分类Dev

如果将两个n位数字相乘,则结果将是最大,位长

来自分类Dev

错误的结果将C中的两个32位数字相乘

来自分类Dev

如何将整数格式化为2位数字的字符串?

来自分类Dev

如何将python中的2位数字与字符串匹配?

来自分类Dev

如何将包含特殊字符的两个小数点后的字符串数字四舍五入?

来自分类Dev

如何将十六进制数字字符串零填充为八位数字?

来自分类Dev

如何将两个数字相乘并获得每两个数字相乘的SUM?

来自分类Dev

将两个 32 位数字相乘并将 64 位结果打印为十进制 NASM 程序集

来自分类Dev

如何将数字相乘直到获得一位数字并计数?

来自分类Dev

如何将零添加到字符串中的一位数字

来自分类Dev

将两个数字相乘表示为字符串

来自分类Dev

如何将“ 12-15”之类的字符串分割成两个数字?

来自分类Dev

如何查找我的字符串是否包含九位数字?

来自分类Dev

如何从包含字符和数字的字符串中提取最后一位数字

来自分类Dev

如何从包含字符和数字的字符串中提取最后一位数字

来自分类Dev

如果是字符串。包含两个数字+“ x” +一个数字,则

来自分类Dev

将字符串拆分为数字和文本,但接受其中包含一位数字的文本

来自分类Dev

分段错误将两个大数字相加表示为字符串

来自分类Dev

Python排序方法将两位数字字符串视为三位数字字符串

来自分类Dev

Python排序方法将两位数字字符串视为三位数字字符串

来自分类Dev

如何将10位数字和2个字母组成的字符串格式化为yyyyMMddHHmm,然后将其格式化为另一个字符串?

来自分类Dev

java:将代表两位数字年份的字符串转换为四位数

来自分类Dev

R regex:如何提取标题中包含一两位数字的字符串?

来自分类Dev

将字符串的数字相乘

Related 相关文章

  1. 1

    仅使用8位数字将两个32位数字相乘

  2. 2

    如何对两个带有4位数字(年份)的字符串进行排序?

  3. 3

    如何将数字字符串化为两个特定的字符串

  4. 4

    如何将5位数字编码为3个字符的字符串

  5. 5

    错误的结果将C中的两个32位数字相乘

  6. 6

    如果将两个n位数字相乘,则结果将是最大,位长

  7. 7

    错误的结果将C中的两个32位数字相乘

  8. 8

    如何将整数格式化为2位数字的字符串?

  9. 9

    如何将python中的2位数字与字符串匹配?

  10. 10

    如何将包含特殊字符的两个小数点后的字符串数字四舍五入?

  11. 11

    如何将十六进制数字字符串零填充为八位数字?

  12. 12

    如何将两个数字相乘并获得每两个数字相乘的SUM?

  13. 13

    将两个 32 位数字相乘并将 64 位结果打印为十进制 NASM 程序集

  14. 14

    如何将数字相乘直到获得一位数字并计数?

  15. 15

    如何将零添加到字符串中的一位数字

  16. 16

    将两个数字相乘表示为字符串

  17. 17

    如何将“ 12-15”之类的字符串分割成两个数字?

  18. 18

    如何查找我的字符串是否包含九位数字?

  19. 19

    如何从包含字符和数字的字符串中提取最后一位数字

  20. 20

    如何从包含字符和数字的字符串中提取最后一位数字

  21. 21

    如果是字符串。包含两个数字+“ x” +一个数字,则

  22. 22

    将字符串拆分为数字和文本,但接受其中包含一位数字的文本

  23. 23

    分段错误将两个大数字相加表示为字符串

  24. 24

    Python排序方法将两位数字字符串视为三位数字字符串

  25. 25

    Python排序方法将两位数字字符串视为三位数字字符串

  26. 26

    如何将10位数字和2个字母组成的字符串格式化为yyyyMMddHHmm,然后将其格式化为另一个字符串?

  27. 27

    java:将代表两位数字年份的字符串转换为四位数

  28. 28

    R regex:如何提取标题中包含一两位数字的字符串?

  29. 29

    将字符串的数字相乘

热门标签

归档