Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2011, 22:19   #1
Steam.dll
 
Регистрация: 01.04.2011
Сообщений: 7
По умолчанию Длинная арифметика.

Пробую уже 4 дня сделать это занание не получается.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <locale.h>
#include <iostream>
void my_fync1( char *a,char *b,char *c);
void my_fync2( char *a,char *b,char *c);
int main(void)
{
        char a[100],b[100],c[100];
        gets(a);
        gets(b);
    my_fync1( a,b,c);
        return 0;
}
void my_fync1( char *a,char *b,char *c)\\ функция умножения масивов char
{
        int l,j,t,d=0,i;
        strrev(a);
        l=strlen(a);
        for(i=0;i<l;i++)
        {
                for(j=0;j<strlen(b);j++)
                {
                    t=(a[j]-48)*(b[i]-48)+d;
                    if(t<9)
                        {
                          c[i]=t+48;
                          d=0;
                        }
                    else
                        {
                          c[i]=t%10+48;
                          d=t/10;
                         
                        }
                }
        }
        if(d>0)
        {
           c[i++]=d+48;
        }
                        
        c[i]='\0';
        strrev(c);
    printf("%s",c);
 
}
void my_fync2( char *a,char *b,char *c)//функция сложения масива char
{
        int l,l1,l2,i,d=0;
        char *t;
        strrev(a);
        strrev(a);
        l1=strlen(a);
        l2=strlen(b);
        if(l2>l1)
        {
                l=l1; l1=l2; l2=l;
                t=a; a=b; b=t;
        }
        for(i=0;i<l;i++)
        {
                c[i]=(a[i]-'0')+(b[i]-'0')+d;
                d=c[i]/10;
        c[i]=c[i]%10+d;
        }
                for(i=0;i<l;i++)
        {
                c[i]=(a[i]-'0')+d;
                d=c[i]/10;
        c[i]=c[i]%10+d;
        }
    if(d)
        {
                c[i++]=d+'0';
        }
        c[i]='\0';
        strrev(c);
}
функция умножения умножает все на однозначное число. я поробывал что бы умножалось на каждое это j в цикле но в конце выводит только последнее действие в конце цикла. А те данные пред идущих циклов пропадают. Их надо сложить но я не знаю как тат как масив у них один и тогда пред идущие данные масива удаляются. Мне надо сделать 100! и отнять 2 в 100 степени. в масив А надо написать 100 значит 100* 1*2*3*4*5*6*......*100. Если это сделать с обычним масивом но тут char надо обязательно.Помогите сделать до конца.
Steam.dll вне форума Ответить с цитированием
Старый 02.04.2011, 04:16   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Steam.dll Посмотреть сообщение
функция умножения умножает все на однозначное число. я поробывал что бы умножалось на каждое это j в цикле но в конце выводит только последнее действие в конце цикла. А те данные пред идущих циклов пропадают. Их надо сложить но я не знаю как тат как масив у них один и тогда пред идущие данные масива удаляются. Мне надо сделать 100! и отнять 2 в 100 степени. в масив А надо написать 100 значит 100* 1*2*3*4*5*6*......*100. Если это сделать с обычним масивом но тут char надо обязательно.Помогите сделать до конца.
А теперь, пожалуйста, то же самое, но так, как это написано в задании, на понятном языке со всеми необходимыми знаками препинания.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 02.04.2011, 12:32   #3
Steam.dll
 
Регистрация: 01.04.2011
Сообщений: 7
По умолчанию

Длинная арифметика.100!-2^100. И действия должны происходить с символьными масивами.
Steam.dll вне форума Ответить с цитированием
Старый 02.04.2011, 13:18   #4
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
А теперь, пожалуйста, то же самое, но так, как это написано в задании, на понятном языке со всеми необходимыми знаками препинания.
Steam.dll, то что вы пишите не поймут ни экстрасенсы, ни монахи шаулиня,ни колдуны вуду, даже пикачу задумается ... Я даже не говорю о обычных людях.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 02.04.2011, 13:32   #5
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

массив с должен быть 2 мерный - в каждой строке хранить число результат умножения

123
*
123
---
12300
+
2460
+
369
=ответ, а в коде результат умножения 369
Упс...

Последний раз редактировалось L_M; 02.04.2011 в 13:39.
L_M вне форума Ответить с цитированием
Старый 02.04.2011, 16:01   #6
Steam.dll
 
Регистрация: 01.04.2011
Сообщений: 7
По умолчанию

Покажите мне пример двухмерного СИМВОЛЬНОГО масива.
Steam.dll вне форума Ответить с цитированием
Старый 02.04.2011, 23:19   #7
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

Цитата:
Сообщение от Steam.dll Посмотреть сообщение
Покажите мне пример двухмерного СИМВОЛЬНОГО масива.
нет никакой разницы в типе данный. чем не устроит char a[100][100] ? А если поизвращаться, и вспомнить о линейности памяти, то можно сделать так char a[10000], первая строка элементы 0..99, вторая 100-199, строка i элемент j будет иметь индекс (i-1)*100+j
Упс...
L_M вне форума Ответить с цитированием
Старый 03.04.2011, 17:06   #8
Steam.dll
 
Регистрация: 01.04.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от L_M Посмотреть сообщение
нет никакой разницы в типе данный. чем не устроит char a[100][100] ? А если поизвращаться, и вспомнить о линейности памяти, то можно сделать так char a[10000], первая строка элементы 0..99, вторая 100-199, строка i элемент j будет иметь индекс (i-1)*100+j
Так это будет 2 строки. А мне надо их много в зависемости количества множетелей. легче структуру создать из одномерного масива с элементами char .
Steam.dll вне форума Ответить с цитированием
Старый 03.04.2011, 17:47   #9
Steam.dll
 
Регистрация: 01.04.2011
Сообщений: 7
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <locale.h>
#include <iostream>
void my_fync1( char *a,char *b);
struct sum
{
	char c[10000];
};
int main(void)
{
        
        char a[10000],b[10000];
        gets(a);
        gets(b);
        my_fync1( a,b);
		return 0;
}
void my_fync1( char *a,char *b)
{
        int n=strlen(b);
	    sum *summa;
		summa=new sum [n];
        int l,m,j,t,d=0,i;
        strrev(a);
        l=strlen(a);
	    for(m=0,j=0;m<n,j<strlen(b);m++,j++)
		{
			for(i=0;i<l;i++)
			{
                t=(a[i]-48)*(b[j]-48)+d;
                if(t<9)
				{
                    summa[m].c[i]=t+48;
                    d=0;
				}
                else
				{
                    summa[m].c[i]=t%10+48;
                    d=t/10;
				}
			}
            if(d>0)
			{
              summa[m].c[i++]=d+48;
			}
              summa[m].c[i]='\0';
              strrev(summa[m].c);
		}
	    for(m=0;m<n;m++)
		{
		     printf("%s\n",summa[m].c);
		}
}
теперь осталось додумать как это всё сложить

Последний раз редактировалось Steam.dll; 03.04.2011 в 17:56.
Steam.dll вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длинная арифметика Indira Общие вопросы C/C++ 2 24.01.2010 10:28
длинная арифметика Dimarik Общие вопросы C/C++ 1 16.09.2009 12:02
Длинная арифметика DmT Помощь студентам 2 06.10.2007 22:43