zoukankan      html  css  js  c++  java
  • 大数相乘----C语言

    /*
    大数相乘:
    因为是大数,乘积肯定超出了能定义的范围,因此考虑用数组存储,定义三个数组,分别存储乘数,被乘数和积。
    规则与平常手算一样,从个位开始分别与被乘数的每一位相乘,但是有一点不同的是:我们先不考虑进位。直接将
    个十百千位存储在乘积数组中。乘数的每一位与被乘数相乘时应向左移一位。对应为相加结果存储在乘积数组中,
    最后统一考虑进位问题
    */
    
    #include<stdio.h>
    #include<conio.h>
    int main() {
        //假设乘积不会超过一千位;
        long m, n;//输入两个数
        int a[1000], b[1000], c[1000];
        int i = 0, j = 0, k = 0, p, q, flag;
        scanf("%ld%ld", &m, &n);
        while (m>0) {//将m的各位存入数组
            a[i++] = m % 10;
            m = m / 10;
        }
        while (n>0) {
            b[j++] = n % 10;
            n = n / 10;
        }
        for (k = 0; k<1000; k++) {
            c[k] = 0;
        }//初始化c数组;
        for (p = 0; p<i; p++) {
            flag = p;//表示此轮乘,从c的那个位置开始保存;
            for (q = 0; q<j; q++) {
                c[flag++] += a[p] * b[q];
            }
        }
        for (i = 0; i<flag; i++) {
            if (c[i] >= 10) {
                c[i + 1] += c[i] / 10;
                c[i] %= 10;
            }
        }
        while (c[flag] >= 10) {//最后一次进位结果单独处理
            c[flag + 1] = c[flag] / 10;
            c[flag++] %= 10;
        }
        for (i = flag; i >= 0; i--) {
            if (c[i] == 0 && i == flag) {
            }
            else {
                printf("%d", c[i]);
            }
        }
        getch();
        return 0;
    }
  • 相关阅读:
    系统调用简单总结
    系统调用原理详解
    总结:c 语言与Linux操作系统的关系
    poj3171 Cleaning Shifts
    洛谷P1032 字串变换
    poj3662 Telephone Lines
    洛谷P1073 最优贸易
    Uva1330/poj1964 City Game
    poj2559/SP1805 Largest Rectangle in a Histogram
    洛谷 P1196 [NOI2002]银河英雄传说
  • 原文地址:https://www.cnblogs.com/lin0/p/6494212.html
Copyright © 2011-2022 走看看