Главная » Сумма и произведение многозначных чисел (Си)
11:49

Сумма и произведение многозначных чисел (Си)


Задание:

Дан входной файл, в котором записаны 2 размера чисел и сами числа. Считать эти данные в выходной файл, а также вывести сумму и произведение этих чисел. 

Идея:

Сложность программы в том, что нет типа, в который мы бы могли положить к примеру 30-значное число, поэтому тут нужно использовать массивы, циклы и самому писать функции сложения и умножения. Но все проще, чем кажется.


Решение (Visual studio):

#include "stdafx.h"
#include "stdlib.h"
#include "conio.h"

void summa(int *a, int *b, int size1, int size2)
{
    FILE *out;
    fopen_s(&out, "out.txt", "a+");
    if (size1 > size2)
    {
        int *sum = new int[size1 + 1];
        for (int i = 0; i < size1 + 1; i++)
            sum[i] = 0;

        for (int i = 0; i < size2; i++)
        {
            sum[i] += a[i] + b[i];
            sum[i + 1] += sum[i] / 10;
            sum[i] %= 10;
        }
        for (int i = size2; i < size1; i++)
        {
            sum[i] += a[i];
            sum[i + 1] += sum[i] / 10;
            sum[i] %= 10;
        }
        fprintf(out, "\nSumm:");
        for (int i = size1 ; i >= 0; i--)
            fprintf_s(out, "%d", sum[i]);
        fprintf_s(out, "\n");
        fclose(out);
        return;
    }
    else
    {
        int *sum = new int[size2 + 1];
        for (int i = 0; i < size2 + 1; i++)
            sum[i] = 0;

        for (int i = 0; i < size1; i++)
        {
            sum[i] += a[i] + b[i];
            sum[i + 1] += sum[i] / 10;
            sum[i] %= 10;
        }
        for (int i = size1; i < size2; i++)
        {
            sum[i] += b[i];
            sum[i + 1] += sum[i] / 10;
            sum[i] %= 10;
        }
        fprintf(out, "\nSumm:");
        for (int i = size2; i >= 0; i--)
            fprintf_s(out, "%d", sum[i]);
        fprintf_s(out, "\n");
        fclose(out);
        return;
    }
}

void umnogenie(int *a, int *b, int size1, int size2)
{
    FILE *out;
    fopen_s(&out, "out.txt", "a+");
    int *mult = new int[size1 + size2 + 1];

    for (int i = 0; i < size1 + size2 + 1; i++)
        mult[i] = 0;
    for (int i = 0; i < size1; i++)
        for (int j = 0; j < size2; j++)
            mult[i + j] += a[i] * b[j];

    for (int i = 0; i < size1 + size2 + 1; i++)
    {
        mult[i + 1] += mult[i] / 10;
        mult[i] %= 10;
    }
    fprintf(out, "Mult:");
    for (int i = size1 + size2-1; i >=0; i--)
        fprintf_s(out, "%d", mult[i]);
    fprintf_s(out, "\n");
    fclose(out);
    return;
}


int _tmain(int argc, _TCHAR* argv[])
{
    FILE *in, *out;
    fopen_s(&in, "in.txt", "r");
    fopen_s(&out, "out.txt", "w+");
    int size1, size2;
    fscanf_s(in, "%d%d", &size1, &size2);
    fprintf(out, "size1:%d\nsize2:%d\n", size1, size2);
    int *a = new int[size1];
    int *b = new int[size2];
    char tmp;
    fscanf_s(in, "%c", &tmp, 1);
    fprintf(out, "First number:");
    for (int i = size1 - 1; i >= 0; i--)
    {
        fscanf_s(in, "%c", &tmp, 1);
        a[i] = (int)tmp - 48;
        fprintf(out, "%d", a[i]);
    }
    fscanf_s(in, "%c", &tmp, 1);
    fprintf(out, "\n");
    fprintf(out, "Second number:");
    for (int i = size2 - 1; i >= 0; i--)
    {
        fscanf_s(in, "%c", &tmp, 1);
        b[i] = (int)tmp - 48;
        fprintf(out, "%d", b[i]);
    }
    fclose(out);
    summa(a, b, size1, size2);
    printf("\n");
    umnogenie(a, b, size1, size2);
    fclose(in);
    fclose(out);
    printf("\n");
    _getch();
    return 0;
}


Пример входного файла:



Пример выходного файла:



Похожие материалы:
Нашли ошибку на сайте? Напишите в комментариях!
Категория: Язык программирования: Си/Си++ | Просмотров: 325 | Добавил: Ученик | Рейтинг: 5.0/1