• 大数相乘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;
    }

  • 相关阅读:
    编辑文章
    POJ_1195 Mobile phones 【二维树状数组】
    WCF探索之旅(三)——IIS公布WCF服务
    doT.js具体使用介绍
    数据结构:最小生成树--Kruskal算法
    关于打开sdk下载不了的最优秀解决方式
    JS 之 数据类型转换
    MongoDB学习笔记&lt;六&gt;
    Spring、Hibernate 数据不能插入到数据库问题解决
    Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现
  • 原文地址:https://www.cnblogs.com/chenyuwang2009/p/2745592.html
Copyright © 2020-2023  润新知