zoukankan      html  css  js  c++  java
  • UVA

    题目VJ上的链接:https://vjudge.net/problem/UVA-10106

    参考博客:https://www.cnblogs.com/wuqianling/p/5387099.html

    思路:1:先把每位的乘的结果得出。2:进位最后统一进。

    1:第一位数字的i位和第二位数字的j位相乘得到的一定是在结果的i+j位上(几位是原数字的从右往左开始数,从0开始)

    sum[i+j]=a[i]*b[j];

    2:简单的进位

     1 #include<stdio.h>
     2 #include<string.h>
     3 char a[1000];
     4 char b[1000];
     5 int a1[1000];
     6 int b1[1000];
     7 int sum[1000*2];
     8 void multiply(char a[],char b[])
     9 {
    10     memset(a1,0,sizeof(a1));
    11     memset(b1,0,sizeof(b1));
    12     memset(sum,0,sizeof(sum));
    13     int len=strlen(a);
    14     for (int i=0,j=len-1;j>=0;j--)//转化为数组 
    15     {
    16         a1[i++]=a[j]-'0';
    17     }
    18     int len1=strlen(b);
    19     for (int i=0,j=len1-1;j>=0;j--)//转化为数组 
    20     {
    21         b1[i++]=b[j]-'0';
    22     }
    23     for(int i=0;i<len;i++)//1:计算相乘 
    24     for (int j=0;j<len1;j++)
    25     {
    26         sum[i+j]+=a1[i]*b1[j];
    27     }
    28     for (int i=0;i<len+len1+100;i++)//2:统一进位 
    29     {
    30         if(sum[i]>=10)
    31         {
    32             sum[i+1]+=sum[i]/10;
    33             sum[i]=sum[i]%10;
    34         }
    35     }
    36     int flag=0;
    37     for(int i=len+len1+100;i>=0;i--)//跳过高位0 
    38     {
    39         if(sum[i]!=0&&flag==0)
    40         {
    41             flag=i;break;
    42         }
    43     }
    44     for(int i=flag;i>=0;i--)//输出 
    45     {
    46         printf("%d",sum[i]);
    47     }
    48     printf("
    ");
    49 }
    50 int main()
    51 {
    52     while (scanf("%s%s",a,b)!=EOF)
    53     {
    54         multiply(a,b); 
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    pandas 查看行列数
    git提交代码至GitHub
    编码错误
    Pandas中根据列的值选取多行数据
    pandas过滤缺失数据之dropna()
    kail linux安装
    mybatis_plus插件使用
    Vue 插槽和自定义事件
    Vue计算属性
    使用axios 异步显示数据到页面
  • 原文地址:https://www.cnblogs.com/bendandedaima/p/9361121.html
Copyright © 2011-2022 走看看