zoukankan      html  css  js  c++  java
  • 大数相乘

    实现原理:

    两个大数,从末尾开始相乘。相乘结果保存在另外一个数组里面(也从数组末尾开始依次往前保存)。然后将保存位置大于9的数进行进位处理

    因为两位成两位最多也是四位,len3就等于len2+len1;

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int i=0,j=0,len1=0,len2=0,len3=0,tem=0,flag=1;//flag标记前几位是否为0,tem标记了len2中每乘完一位向前进一。 
     9     char strnum1[1000],strnum2[1000],strnum3[2000];
    10     int num[1000]={0};
    11     
    12     //gets(strnum1);
    13     scanf("%s%s",strnum1,strnum2);
    14     //gets(strnum2);
    15     
    16     len1=strlen(strnum1);
    17     len2=strlen(strnum2);
    18     len3=len1+len2;
    19     tem=len3;
    20     
    21     //相乘 
    22     for(i=len2-1;i>=0;i--)   //从第二个数的最后一位开始计算(从后往前)。 
    23     {
    24         tem=--len3;          //计算完一位,结果数组向前进一位。 
    25         for(j=len1-1;j>=0;j--)
    26         {
    27             num[tem--]+=(strnum2[i]-'0')*(strnum1[j]-'0'); 
    28         } 
    29     }
    30     
    31     //进位 
    32     len3=len1+len2;
    33     
    34     for(i=len3-1;i>=0;i--)
    35     {
    36         while(num[i]>9)
    37         {
    38             num[i-1]+=num[i]/10;
    39             num[i]=num[i]%10;
    40         }
    41     }
    42     if(strcmp(strnum1,"0")==0||strcmp(strnum2,"0")==0)
    43     {
    44         printf("0");
    45     }
    46     else
    47     {
    48         for(i=0;i<len3;i++)
    49         {
    50             if(num[i]==0&&flag==1)
    51                 continue;
    52             else
    53                 flag=0;
    54             printf("%d",num[i]);     
    55         } 
    56     }
    57     
    58     printf("
    ");
    59 }
    大数相乘模板
  • 相关阅读:
    Linux下的MySQL主从同步
    人不能同时在两个地方做猪(Scrum Team)
    memcache安装
    Java开发中的Memcache原理及实现
    linux mv
    nginx
    idea 热部署
    vue watch
    vue入门
    基于vue-cli快速构建
  • 原文地址:https://www.cnblogs.com/WDKER/p/5185798.html
Copyright © 2011-2022 走看看