• 大数相乘C语言实现100位以内的数字相乘


    #include "stdafx.h"
    #include<malloc.h>


    int _tmain(int argc, _TCHAR* argv[])
    {
     
    char str1[100];
    char str2[100];

    int i=0;
    int j=0;
    int num1=0;
    int num2=0;
    printf("输入第一个数字:");
    scanf("%s",&str1);

    while(str1[i]!='\0')
    {
     if(!(47<str1[i]&&str1[i]<58))
     {
      printf("只能输入数字,重新输入:");
      scanf("%100s",&str1);//%100s限制输入字符在100个以内,缺陷:超过的数会流入到下个字符中,即到str2的字符中
      i=0;
     }
     i++;
    }
    num1=i;
    printf("输入第二个数字:");
    scanf("%s",&str2);

    i=0;
    while(str2[i]!='\0')
    {
     if(!(47<str2[i]&&str2[i]<58))
     {
      printf("只能输入数字,重新输入:");
      scanf("%100s",&str2);
      i=0;
     }
     i++;
    }
    num2=i;


    char *result;
    int *s = (int*)malloc(sizeof(int)*(num1+num2));

    for (i=0; i<num2+num1; i++) 
                    s[i]=0; 
     
           printf("The s is :%d and %d/n", num1, num2); 

       
            for (i=0; i<num1; i++)
                    for (j=0; j<num2; j++)
                            s[i+j+1] += (str1[i]-'0')*(str2[j]-'0');//错位加上各项乘积,正好类似于乘法的竖式计算

            for (i=num1+num2-1; i>=0; i--){
                    if (s[i] >= 10){
                            s[i-1] += s[i]/10;//从最后一位开始,若数组的元素值>10,则其上一位的值+1,
                            s[i]%=10;         //本身的值为除以10后的余数,正好符合进一位

                    }
     }
      i=0;
            while(s[i] == 0)//从第一位开始,找到不为0的是第几位,为了删除前面多余的0,s[0]一开始就被赋值为0了
                    i++;

            result = (char*)malloc( num1 + num2 + 1 - i);//减去多余的位数i,分配准确的空间给result

            for ( j=0; i < num1+num2; i++,j++){
                    result[j] = s[i] + '0'; //将s中值赋给result,result从第0位开始接受值
            }

            result[j] = '\0';  //result最后加上结尾

            free(s); //释放s空间

      printf("The number %s multiply %s result in %s./n", str1, str2, result); 

    getchar();
     getchar();
     return 0;
    }

  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/chenyuwang2009/p/2745592.html
Copyright © 2020-2023  润新知