zoukankan      html  css  js  c++  java
  • 大数相乘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;
    }

  • 相关阅读:
    用Fiddle跟踪调试移动表单
    查找指定表、字段上面的默认值约束
    sql跳过非工作日(周末和节假日)
    python学习(一)
    charles抓包
    jemeter简单压测
    jemeter接口测试
    postman接口测试
    接口测试基础知识学习
    定期小结
  • 原文地址:https://www.cnblogs.com/chenyuwang2009/p/2745592.html
Copyright © 2011-2022 走看看