zoukankan      html  css  js  c++  java
  • 大数相乘-蛮力法

    输入:

    a=1234    b=1234,求a*b的值。(小的数能看得清晰)

    问题思路:

    在运用笔算时的方法为:

    两个数相乘的结果的位数一定不大于这两个数的长度总和。将红色区域的数存入数组中,判断大于10的进1,最后求出得数1522756。

    代码:

    #include<iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    
    int main()
    {
        char a[1000],b[1000];
        int c[2000]= {0};
        gets(a);
        gets(b);
        int num=0;
        for(int i=strlen(a)-1; i>=0; i--)    //c数组为下标0开始存数
        {
            int k=num;
            for(int j=strlen(b)-1; j>=0; j--)
            {
                c[k]=c[k]+(a[i]-48)*(b[j]-48);
                k++;
            }
            num++;
        }
        for(int i=0; i<strlen(a)+strlen(b)-1; i++)    //大于10的进1
        {
            if(c[i]>=10)
            {
                c[i+1]+=c[i]/10;
                c[i]=c[i]%10;
            }
        }
        int d=0;
        for(int i=strlen(a)+strlen(b)-1; i>=0; i--)    //标记多余0的个数
        {
            if(c[i]==0)
            {
                d++;
            }
            else
                break;
        }
        for(int i=strlen(a)+strlen(b)-1-d; i>=0; i--)   //输出结果
        {
            cout<<c[i];
        }
        return 0;
    }
  • 相关阅读:
    VB获取对象成员
    VB一键扫雷
    VBS代码
    C# LINQ GroupBy
    C# 元组和值元组
    数据结构笔记
    DoTween使用
    Unity中常用的数据结构总结
    Unity 坐标系转换
    .Net中C# Dictionary 用法
  • 原文地址:https://www.cnblogs.com/xxaf/p/12788666.html
Copyright © 2011-2022 走看看